1

ここで奇妙なグリッチのビット。

IF ステートメントがコメント アウトされている場合、タグ名はchildNode正しくログに記録されますが、IF ステートメントのコメントを解除するとすぐに、childNodeタグ名は " #TEXT" としてログに記録されます。

<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>

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;
            var i = allTags.length;

            while (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>
4

2 に答える 2

1

条件が任意の(tag != "b" || tag != "br" || tag != "i")ノードを選択するを参照してください(おそらくそうあるべきです。したがって、removeChild関数はすべてのループで呼び出されます。(tag != "b" && tag != "br" && tag != "i") instead).

allTags[i].parentNode.removeChild(allTags[i]);に置き換えられた場合

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

動作が異なります。これも参照してください:removechildループは終了する前に終了します

于 2012-07-03T13:43:20.030 に答える
0

この行を追加して、テキストノードかどうかを確認できます

for (...) {
    if (allTags[i].nodeType == 3) continue; //nodeType = 3 means it is a text node
    ...
}
于 2012-07-03T13:15:21.883 に答える