什么是错误的我的代码在javascript
What is wrong with my code in javascript?
这里需要一些帮助。我正在使用bootstrap CSS设计我的网站。
这是我的第一个代码片段:<ul class="nav nav-pills nav-stacked border-right" id="clearFilter" style="display:none">
<li class="text-uppercase bold-text" onclick="showChild(event)"><a href="#" class="li-head-color">Clear Filter<span class="glyphicon glyphicon-plus float-right" aria-hidden="true"></a></li>
</ul>
如果检查这个ul元素的长度。它显示3。
然后当我尝试使用javascript向此ul添加li时,长度仅增加1。
这是javascript代码:
var ul = document.getElementById("clearFilter");
var li = document.createElement("li");
var anchor = document.createElement("a");
var span = document.createElement("span");
span.setAttribute("class","glyphicon glyphicon-remove-circle float-right");
anchor.appendChild(document.createTextNode(str));
anchor.appendChild(span);
anchor.setAttribute("href","#");
li.appendChild(anchor);
li.setAttribute("onclick","removeFilter(event)");
li.setAttribute("style","display:none");
ul.appendChild(li);
那么这可能是什么原因呢?我的代码中还有3个这样的ul元素。ul的长度大于实际存在的li元素。这可能是什么原因呢?我做错什么了吗?
您将获得文本节点(<ul>
, <li>
和</ul>
之间的文本)以及<li>
节点。
如果你使用childNodes
属性,使用下面的代码过滤掉文本节点,如果需要的话(IE9+)。
var children = ul.childNodes;
children = Array.prototype.slice.call(children).filter(function(element) { return element.nodeType == 1; });
请参阅jsFiddle获取代码和演示,并参阅SO讨论获取更多信息。
我认为您的问题是,当您获得<ul>
元素的"长度"时,结果返回3个子元素- <li>
, <a>
和<span>
元素。
下面的JavaScript返回一个长度为1的数组-这是你想要的吗?
document.getElementById('clearFilter').getElementsByTagName('li').length;
您使用的是childNodes
还是children
?
childNodes
' return value:
一个NodeList对象,表示节点的集合。返回集合中的节点按照它们在源代码
中出现的顺序排序。
children
返回值文档:
一个活动的HTMLCollection对象,表示元素节点的集合。返回集合中的元素按照它们在源代码
中出现的顺序排序。
对我来说,这似乎很清楚。但只是尝试一下,children
属性忽略空白作为"文本节点",而childNodes
包含发现空间时的额外节点。这基本上意味着,在您的情况下,不同之处在于,当您编写代码时,您包含空白,这意味着DOM解析器正在创建额外的文本节点。在javascript中创建节点时,不会添加空白。
的例子说明我的观点,如果没有空格,你得到相同的结果,无论你使用childNodes
或children
属性。
function childLengthDemo(id){
console.log(document.getElementById(id).children.length); // 1, 1
console.log(document.getElementById(id).childNodes.length); // 1, 3
var ul = document.getElementById(id);
var li = document.createElement("li");
var anchor = document.createElement("a");
var span = document.createElement("span");
span.setAttribute("class","glyphicon glyphicon-remove-circle float-right");
anchor.appendChild(document.createTextNode("Another Clear Filter")); // your variable, str, was undefined
anchor.appendChild(span);
anchor.setAttribute("href","#");
li.appendChild(anchor);
li.setAttribute("onclick","removeFilter(event)");
li.setAttribute("style","display:none");
ul.appendChild(li);
console.log(document.getElementById(id).children.length); // 2, 2
console.log(document.getElementById(id).childNodes.length); // 2, 4
}
childLengthDemo('clearFilter-nowhitespace'); // same for both children and childNodes property
childLengthDemo('clearFilter-whitespace'); // different for children and childNodes property
<ul class="nav nav-pills nav-stacked border-right" id="clearFilter-nowhitespace" style="display:none"><li class="text-uppercase bold-text" onclick="showChild(event)"><a href="#" class="li-head-color">Clear Filter<span class="glyphicon glyphicon-plus float-right" aria-hidden="true"></span></a></li></ul>
<ul class="nav nav-pills nav-stacked border-right" id="clearFilter-whitespace" style="display:none">
<li class="text-uppercase bold-text" onclick="showChild(event)">
<a href="#" class="li-head-color">
Clear Filter
<span class="glyphicon glyphicon-plus float-right" aria-hidden="true" style="display:none"></span>
</a>
</li>
</ul>
- 云代码(javascript)失败,原因是:{代码:1,消息:内部错误
- 简化此If语句,使其不会't重复代码-Javascript
- 十进制到二进制代码Javascript
- 第二次单击时执行不同的代码(JavaScript)
- 在不使用jquery($symbol)knockout.js的情况下分离代码javascript
- 缩短几个元素的onclick代码 - JavaScript
- 英国银行排序代码 JavaScript 正则表达式
- 我无法在谷歌图表的代码 javascript 中获取 json 数据(项目 Python Hello Dashboard
- 和代码 JavaScript 没有被 &.
- 我怎样才能减少这段代码 javascript 代码,这样它就不会那么重复了
- 我想单击一个按钮,一次只执行已经制作的程序中的一行代码.(JavaScript)
- 滑动 DIV 代码 Javascript 的小问题
- 尝试重写代码 JavaScript
- 是否可以检测到在不使用键代码 javascript 的情况下按下了输入键
- 输入网址代码 JavaScript 播放器
- 管理通用客户端代码(javascript/css)
- 理解代码javascript
- 加载json-url参数代码(javascript修改)
- 变量检查错误的代码(javascript)
- css属性仅由代码javascript应用