javascript - 使用DOM方法normalize()的效果

标签 javascript dom normalize

看来我不明白 DOM 方法 normalize() 的确切操作。

我认为它会删除完全空的文本节点。但是我没有观察到这种效果。

这是一个示例文档。

<!DOCTYPE html />

<html lang = "en">

<head>
    <meta charset = "Utf-8" />
    <title>Normalize</title>
</head>

<body>

    <form accept = "#" method = "post">
        <fieldset><legend>Using normalize()</legend>
        <p>The form is used only to test the method normalize().</p>
        <div>
            <label for = "text">Label</label>
            <input type = "text" name = "text" id = "text"/>
        </div>
        </fieldset>
    </form>

    <script>
        window.onload = function () {
            var element = document.getElementById("text");

            do {
                alert(element);
                element = element.previousSibling;
            } while (element.nodeType != Node.ELEMENT_NODE);

            alert(element);

            var element = document.getElementById("text");

            element.parentNode.normalize();

            do {
                alert(element);
                element = element.previousSibling;
            } while (element.nodeType != Node.ELEMENT_NODE);

            alert(element);
        };
    </script>
</body>

</html>

第一个 do-while 在方法 normalize() 尚未调用时输出节点。 它在 IE-11 中的输出如下

[object HTMLInputElement]
[object Text]
[object HTMLLabelElement]

但是,在调用方法 normalize() 后,下一个 do-while 循环会产生相同的输出序列:

[object HTMLInputElement]
[object Text]
[object HTMLLabelElement]

我认为输出

[object Text]

第二个循环中不应出现。

我对 normalize() 方法的理解有什么问题? 或者 DOM 规范中空 Text 节点的确切定义是什么?

最佳答案

“标准化”方法定义表示“子树中没有文本节点是空的,并且没有相邻的文本节点”在您的情况下,没有空的文本节点,有具有“↵”和一些空格的文本节点。如果您将 html 更改为:

<label for = "text">Label</label><input type = "text" name = "text" id = "text"/>

“label”和“input”元素在一起时不带空格,您将不会收到“#text”节点的任何警报。现在,如果您确实想了解规范化的工作原理,您应该创建两个具有空值的文本节点:

document.createTextNode('');

将它们放在“标签”和“输入”元素之间。然后运行您的代码。您将收到两个关于 #text 节点的警报。标准化后,您不应该收到任何 #text 节点的警报。

关于javascript - 使用DOM方法normalize()的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34924781/

相关文章:

javascript - Jquery 和 html::Getting the nearest data attribute

Pandas: Grouped DataFrame - 将列的值除以每组该列中特定行的值

c - 通过 ICU4C 进行 Unicode 规范化

dom - 单击事件不适用于 SVG 中路径的标记结束

javascript:如何从window.opener访问window.top?

javascript - 我可以使用 jQuery 访问影子 DOM 吗?

python 对具有上限和下限的数据框进行缩放和评分

javascript - 如何在 Chrome 扩展程序中安全地存储密码?

javascript - 如果我的文本长度在 li div 中很大,那么 div 跨度和 li 高度会自动调整..?

javascript - 如何避免vuejs中v-for循环输出的重复值