HTML5 将 IE 发明的 innerHTML 和 outerHTML 纳入了标准,但还有两个属性没有入选。这两个剩下的属性是 innerText 和 outerText。
- innerText 属性 innerText 属性对应元素中包含的所有文本内容,无论文本在子树中哪个层级。在用于读取值时,innerText 会按照深度优先的顺序将子树中所有文本节点的值拼接起来。在用于写入值时innerText会移除元素的所有后代并插入一个包含该值的文本节点。来看下面的 HTML 代码:
<p>This is a <strong>paragraph</strong> with a list following it.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</div>
对这个例子中的
而言,innerText 属性会返回以下字符串:
Item 1
Item 2
Item 3
注意不同浏览器对待空格的方式不同,因此格式化之后的字符串可能包含也可能不包含原始 HTML代码中的缩进。 下面再看一个使用 innerText 设置
元素内容的例子:
执行这行代码后,HTML 页面中的这个
元素实际上会变成这个样子:
设置 innerText 会移除元素之前所有的后代节点,完全改变 DOM 子树。此外,设置 innerText也会编码出现在字符串中的 HTML 语法字符(小于号、大于号、引号及和号)。下面是一个例子:
执行之后的结果如下:
因为设置 innerText 只能在容器元素中生成一个文本节点,所以为了保证一定是文本节点,就必须进行 HTML 编码。innerText 属性可以用于去除 HTML 标签。通过将 innerText 设置为等于 innerText,可以去除所有 HTML 标签而只剩文本,如下所示:
执行以上代码后,容器元素的内容只会包含原先的文本内容。 outerText 属性 outerText 与 innerText 是类似的,只不过作用范围包含调用它的节点。要读取文本值时,outerText 与 innerText 实际上会返回同样的内容。但在写入文本值时,outerText 就大不相同了。 写入文本值时,outerText 不止会移除所有后代节点,而是会替换整个元素。比如:
这行代码的执行效果就相当于以下两行代码:
div.parentNode.replaceChild(text, div);
本质上,这相当于用新的文本节点替代 outerText 所在的元素。此时,原来的元素会与文档脱离关系,因此也无法访问。 outerText 是一个非标准的属性,而且也没有被标准化的前景。因此,不推荐依赖这个属性实现重要的操作。除 Firefox 之外所有主流浏览器都支持 outerText。 滚动 如前所述,滚动是 HTML5 之前 DOM 标准没有涉及的领域。虽然 HTML5 把 scrollIntoView() 标准化了,但不同浏览器中仍然有其他专有方法。比如,```scrollIntoViewIfNeeded()作 为 HTMLElement 类型的扩展可以在所有元素上调用。scrollIntoViewIfNeeded(alingCenter)会在 元素不可见的情况下,将其滚动到窗口或包含窗口中,使其可见;如果已经在视口中可见,则这个方法
什么也不做。如果将可选的参数 alingCenter 设置为 true,则浏览器会尝试将其放在视口中央。Safari、Chrome 和 Opera 实现了这个方法。
下面使用 scrollIntoViewIfNeeded()方法的一个例子:
```// 如果不可见,则将元素可见
document.images[0].scrollIntoViewIfNeeded();
考虑到 scrollIntoView()是唯一一个所有浏览器都支持的方法,所以只用它就可以了。 小结 虽然 DOM 规定了与 XML 和 HTML 文档交互的核心 API,但其他几个规范也定义了对 DOM 的扩展。很多扩展都基于之前的已成为事实标准的专有特性标准化而来。本章主要介绍了以下 3 个规范。 Selectors API 为基于 CSS 选择符获取 DOM 元素定义了几个方法:querySelector()、querySelectorAll()和 matches()。 Element Traversal 在 DOM 元素上定义了额外的属性,以方便对 DOM 元素进行遍历。这个需求是因浏览器处理元素间空格的差异而产生的。 HTML5 为标准 DOM 提供了大量扩展。其中包括对 innerHTML 属性等事实标准进行了标准化,还有焦点管理、字符集、滚动等特性。 DOM 扩展的数量总体还不大,但随着 Web 技术的发展一定会越来越多。浏览器仍然没有停止对专有扩展的探索,如果出现成功的扩展,那么就可能成为事实标准,或者最终被整合到未来的标准中。
标签:DOM,标记,元素,js,插入,HTML,innerText,outerText,文本 From: https://blog.51cto.com/u_16237074/9632435