使用JavaScript与常规HTML创建HTML元素
Creating HTML elements with JavaScript vs regular HTML
我有一个HTML代码,如下所示:
<div id="user-nav">
<button class="btn btn-primary btn-sm">Subscribe Now</button>
<button class="btn btn-primary btn-sm">Log In</button>
</div>
然后我尝试用JavaScript创建同样的东西:
// usernav - subscribe, login, settings
var subbtn = document.createElement("button");
subbtn.className = "btn btn-primary btn-sm";
subbtn.textContent = "Subscribe Now";
usernav.appendChild(subbtn);
var loginbtn = document.createElement("button");
loginbtn.className = "btn btn-primary btn-sm";
loginbtn.textContent = "Log In";
usernav.appendChild(loginbtn);
我的JavaScript代码运行得非常好。
然而,有一个小的区别,JavaScript产生的按钮是相互接触的,而当我刚用HTML编码时,两个按钮之间有一个很小的间隙。
当我检查两页的元素时,代码是相同的。
为什么会发生这种情况,我如何在JavaScript上产生完全相同的结果?
为什么会发生这种情况:
您的HTML在两个元素之间包含空白字符,这些字符将折叠成具有默认样式的单个空格。
但是,您的JavaScript不会创建这个空白文本节点。
证明:
这里有一个片段,显示HTML实际上创建了5个子节点,其中3个子节点位于空白区域的文本节点。
var el = document.getElementById('user-nav');
console.log(el.childNodes);
document.getElementById('output').textContent = 'Number of Child nodes: ' + el.childNodes.length;
<div id="user-nav">
<button class="btn btn-primary btn-sm">Subscribe Now</button>
<button class="btn btn-primary btn-sm">Log In</button>
</div>
<pre id="output"></pre>
如果你检查你的控制台,你会看到如下输出:
NodeList [ #text "
", <button.btn.btn-primary.btn-sm>, #text "
", <button.btn.btn-primary.btn-sm>, #text "
" ]
重新创建结果:
您可以使用document.createTextNode
在JavaScript中创建一个文本节点,如下所示:
var usernav = document.getElementById('user-nav');
var subbtn = document.createElement("button");
subbtn.className = "btn btn-primary btn-sm";
subbtn.textContent = "Subscribe Now";
usernav.appendChild(subbtn);
// Insert text node between the buttons:
usernav.appendChild(document.createTextNode(' '));
var loginbtn = document.createElement("button");
loginbtn.className = "btn btn-primary btn-sm";
loginbtn.textContent = "Log In";
usernav.appendChild(loginbtn);
<div id="user-nav"></div>
但是,您可能需要考虑使用CSS。
您可以使用textNode
:插入空白
var usernav = document.getElementById('user-nav');
var subbtn = document.createElement("button");
subbtn.className = "btn btn-primary btn-sm";
subbtn.textContent = "Subscribe Now";
usernav.appendChild(subbtn);
usernav.appendChild(document.createTextNode(''n'));
var loginbtn = document.createElement("button");
loginbtn.className = "btn btn-primary btn-sm";
loginbtn.textContent = "Log In";
usernav.appendChild(loginbtn);
<div id="user-nav">
</div>
相关文章:
- 从html创建一个指令,该指令按类名应用函数
- 用HTML创建一个下拉框的简单方法,只需包含0到x
- 基于当前内部HTML创建动态jQuery变量名称
- mootools:从 HTML 创建一个新的 DOM 元素
- 使用 flash、javascript、classic asp 从 html 创建 CSV
- JQuery + 从数组中为 html 创建单选按钮
- 100%的高度在主体和html创建滚动问题
- 使用JavaScript与常规HTML创建HTML元素
- 用HTML创建JavaScript数组
- 从HTML创建base64字符串
- 如何仅使用JS和HTML创建按钮
- 如何通过jquery .html创建一个href,然后使用它的事件
- 在用javascript和html创建程序时遇到问题
- 如何使用引导程序和HTML创建联系人表单
- 如何使用Javascript和HTML创建一个文档文件
- 用HTML创建登录页面
- 使用Canvas和Html 5创建类似flash的动画
- 使用jQuery从HTML创建一个JSON对象
- 如何禁用由html创建的特定dijit contentPane选项卡
- 用PHP, JavaScript和Html创建一个简单的购物车