function countChars(elm) {
if (elm.nodeType == 3) { // TEXT_NODE
return elm.nodeValue.length;
}
var count = 0;
for (var i = 0, child; child = elm.childNodes[i]; i++) {
count += countChars(child);
}
return count;
}
我尝试将此函数传递给countChars("hello")
之类的字符串;但那没用。我可以传递哪些元素的例子?
答案 0 :(得分:5)
它期望对DOM节点的引用。根据函数的外观,它可以是文本节点(nodeType == 3
)或元素节点(nodeType == 1
)。例如:
countChars(document.getElementById("someId"));
以下HTML会导致上述调用返回5
:
<span id="someId">Hello</span>
如果参数是文本节点,则该函数返回组成该节点的字符数。如果参数是元素节点,则函数递归计算构成元素的后代文本节点的字符数。
以下HTML会导致上述调用返回10
(包含子节点):
<div id="someId">Outer<span>inner</span></div>
您可以看到node types on MDN的完整列表。
答案 1 :(得分:3)
它期望DOM节点,例如你从document.getElementById()
得到的东西或另一个DOM节点上的子节点列表。
它的作用是找到元素子节点列表中的所有文本节点,并计算它们包含的字符数。它以递归方式执行,因此无论元素图中的分隔距离如何,它都会在容器中找到 all 文本。
还应该注意,此代码要求节点是文本节点或元素。但是,还有其他类型的节点,最值得注意的是注释节点。
答案 2 :(得分:2)
看起来你应该传递一个dom元素。
答案 3 :(得分:2)
一个元素(实际上是节点,因此它检查nodeType是否是文本节点的原因),例如:
countChars(document.getElementById("myid"));
答案 4 :(得分:1)
您可以在DOM片段上获取nodeType,因此......您必须输入DOM元素作为输入
https://developer.mozilla.org/en/nodeType
该链接的示例显示了
var node = document.documentElement.firstChild;
if(node.nodeType != Node.COMMENT_NODE)
alert("You should comment your code well!");