<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>古诗补全演示</title>
<style>
.poem {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 15px;
margin: 10px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
font-size: 18px;
text-align: center;
}
.container {
max-width: 600px;
margin: 50px auto;
padding: 20px;
}
input, button {
padding: 10px;
margin: 5px;
border: 1px solid #ddd;
border-radius: 4px;
}
button {
background: #4CAF50;
color: white;
cursor: pointer;
}
</style>
</head>
<body>
<div>
<h2>古诗补全演示</h2>
<!-- 原始HTML结构 -->
<form name="myform">
<input type="text" name="last" placeholder="请输入古诗最后一句">
<button type="button" onclick="completePoem()">补全古诗</button>
</form>
<!-- 目标容器 - 补全的古诗将显示在这里 -->
<div id="poemDiv">
<div>床前明月光,疑是地上霜。</div>
<div>举头望明月,低头思故乡。</div>
</div>
</div>
<script>
function completePoem(){
// 第1层:创建空白容器
// 相当于:<div></div>
var div = document.createElement('div');
// 第2层:为容器添加样式类
// 相当于:<div></div>
div.className = 'poem';
// 第3层:获取用户输入
// 假设用户输入了"春风又绿江南岸"
var last = document.myform.last.value;
// 第4层:创建文本内容
// 相当于创建了文字节点:"春风又绿江南岸"
var txt = document.createTextNode(last);
// 第5层:将文字放入容器
// 相当于:<div>春风又绿江南岸</div>
div.appendChild(txt);
// 第6层:将完整元素添加到页面
// 将上面创建的元素添加到id为poemDiv的容器中
document.getElementById('poemDiv').appendChild(div);
// 最终效果:在页面中看到新的古诗句子
// poemDiv容器内会多出一个带有样式的div元素
}
</script>
</body>
</html>代码逐层解析:
<script>
function completePoem(){
// 第1层:创建空白容器
// 相当于:<div></div>
var div = document.createElement('div');
// 第2层:为容器添加样式类
// 相当于:<div class="poem"></div>
div.className = 'poem';
// 第3层:获取用户输入
// 假设用户输入了"春风又绿江南岸"
var last = document.myform.last.value;
// 第4层:创建文本内容
// 相当于创建了文字节点:"春风又绿江南岸"
var txt = document.createTextNode(last);
// 第5层:将文字放入容器
// 相当于:<div class="poem">春风又绿江南岸</div>
div.appendChild(txt);
// 第6层:将完整元素添加到页面
// 将上面创建的元素添加到id为poemDiv的容器中
document.getElementById('poemDiv').appendChild(div);
// 最终效果:在页面中看到新的古诗句子
// poemDiv容器内会多出一个带有样式的div元素
}
</script>第1层:创建空白div容器,相当于在内存中准备了一个空的HTML标签 <div></div>
第2层:为div添加CSS类名,相当于给标签添加样式属性 <div class="poem"></div>
第3层:获取用户输入内容,比如用户输入"春风又绿江南岸"
第4层:创建文本节点,将用户输入包装成DOM可识别的文本内容
第5层:将文本放入div容器,相当于组装成完整的HTML元素 <div class="poem">春风又绿江南岸</div>
第6层:将组装好的元素插入页面,在id为poemDiv的容器中显示新的古诗句子
整个过程就像在页面上动态添加了一个新的古诗卡片,每次点击按钮都会创建一个带有渐变背景和圆角边框的新诗句显示区域。
<script type="text/javascript">
function completePoem(){//定义completePoem()函数
var div = document.createElement('div');//创建div元素
div.className = 'poem';//为div元素添加CSS类
var last = myform.last.value;//获取用户输入的古诗最后一句
txt=document.createTextNode(last);//创建文本节点
div.appendChild(txt);//将文本节点添加到创建的div元素中
document.getElementById('poemDiv').appendChild(div);//将创建的div元素添加到id为poemDiv的div元素中
}
</script>详细讲解这一段代码的补全逻辑,是如何补全的?一层一层一句一句解析讲解出来。这里的很多方法是不是都是规定好的啊
这段JavaScript代码实现了一个古诗补全功能,主要通过DOM操作在页面上动态添加用户输入的古诗内容。
代码逐句解析
第1行:函数定义
function completePoem(){//定义completePoem()函数声明了一个名为completePoem的函数,用于封装整个补全逻辑。
第2行:创建div元素
var div = document.createElement('div');//创建div元素使用document.createElement()方法创建一个新的<div>元素节点。
在DOM中,每个HTML元素都对应一个节点对象。
第3行:设置CSS类名
div.className = 'poem';//为div元素添加CSS类
为新创建的div元素设置className属性为"poem",这样可以通过CSS样式表为这个元素定义特定的显示样式。
第4行:获取用户输入
var last = myform.last.value;//获取用户输入的古诗最后一句
从名为myform的表单中获取last字段的值,这个值应该是用户输入的古诗最后一句内容。
第5行:创建文本节点
txt=document.createTextNode(last);//创建文本节点
使用document.createTextNode()方法创建一个包含用户输入文本的文本节点。
在DOM中,文本内容也是作为独立的节点存在的。
第6行:将文本添加到div
div.appendChild(txt);//将文本节点添加到创建的div元素中
使用appendChild()方法将创建的文本节点添加到之前创建的div元素中,作为其子节点。
第7行:将div添加到页面
document.getElementById('poemDiv').appendChild(div);//将创建的div元素添加到id为poemDiv的div元素中通过getElementById()方法找到页面中ID为"poemDiv"的元素,然后将包含用户输入文本的div元素添加进去。
关于DOM方法的规定性
这些DOM操作方法确实是W3C标准规定的API。
JavaScript中的DOM操作主要包含创建、增、删、改、查等核心功能:
创建操作:
document.createElement()、document.createTextNode()等用于创建新节点增加操作:
appendChild()用于将节点添加到指定位置查询操作:
getElementById()、getElementsByTagName()等用于获取页面元素
这些方法构成了Web标准的一部分,确保了不同浏览器之间的兼容性和一致性。
通过节点层级关系(父子兄节点),可以方便地操作文档结构。