这个函数需要什么样的参数?

时间:2012-01-31 20:26:03

标签: javascript

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")之类的字符串;但那没用。我可以传递哪些元素的例子?

5 个答案:

答案 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!");
相关问题