当IF语句没有被注释掉时,nodeName被返回为“#text”

时间:2012-07-03 13:06:01

标签: javascript

这里有一点奇怪的故障。

当IF语句被注释掉时,childNode的标记名称被正确记录,但是一旦取消注释IF语句,childNode标记名称就会被记录为“{{1} }”。

#TEXT

http://jsfiddle.net/MythOfEchelon/VpNWA/3/

已完成,正在运行的代码:

<body>
    <div id="page_Wrapper">
        <h1>h1</h1>
        <br />
        <br />
        <br />
        <b>b</b>
        <br />
        <i>i</i>
        <br />
        <u>u</u>
        <div>div</div>
        <span>span</span>
    </div>

    <script>
        window.onLoad = removeTags();

        function removeTags(){
            var allTags = document.getElementById("page_Wrapper").childNodes;
            console.log("allTags length: " + allTags.length);

            for (var i = 0; i < allTags.length; i++){
                var tag = allTags[i].nodeName.toLowerCase();
                console.log(tag);
            /*
                if (tag != "b" || tag != "br" || tag != "i"){
                    allTags[i].parentNode.removeChild(allTags[i]);
                }
            */
            }
        }
    </script>
</body>

2 个答案:

答案 0 :(得分:1)

请参阅条件(tag != "b" || tag != "br" || tag != "i")选择任何节点(它可能应该是(tag != "b" && tag != "br" && tag != "i") instead).因此每次循环都会调用removeChild函数。

如果allTags[i].parentNode.removeChild(allTags[i]);替换为

var x = allTags[i];
x.parentNode.removeChild(x);

行为不同。另见:removechild loop exits before finish

答案 1 :(得分:0)

您可以添加此行以检查它是否为文本节点

for (...) {
    if (allTags[i].nodeType == 3) continue; //nodeType = 3 means it is a text node
    ...
}