diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/web/api/node/textcontent | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/zh-cn/web/api/node/textcontent')
-rw-r--r-- | files/zh-cn/web/api/node/textcontent/index.html | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/files/zh-cn/web/api/node/textcontent/index.html b/files/zh-cn/web/api/node/textcontent/index.html new file mode 100644 index 0000000000..1a2cd275e7 --- /dev/null +++ b/files/zh-cn/web/api/node/textcontent/index.html @@ -0,0 +1,145 @@ +--- +title: Node.textContent +slug: Web/API/Node/textContent +tags: + - Node.textContent + - innerHTML + - innerText + - 参考 +translation_of: Web/API/Node/textContent +--- +<div>{{APIRef("DOM")}}</div> + +<p>{{domxref ("Node")}} 接口的<strong> </strong><code><strong>textContent</strong></code> 属性表示一个节点及其后代的文本内容。</p> + +<div class="blockIndicator note"> +<p><strong>注意:</strong> <code>textContent</code> 和 {{domxref("HTMLElement.innerText")}} 容易混淆,但这两个属性在<a href="https://wiki.developer.mozilla.org/zh-CN/docs/Web/API/Node/textContent#与_innerText_的区别">重要方面有不同之处</a> 。</p> +</div> + +<h2 id="Syntax" name="Syntax">语法</h2> + +<pre>let <var>text</var> = <var>someNode</var>.textContent; +<var>someOtherNode</var>.textContent = <var>string</var>;</pre> + +<h3 id="返回值">返回值</h3> + +<p>一个字符串或 <code>null</code>.</p> + +<h2 id="Notes" name="Notes">描述</h2> + +<p><code>textContent</code> 的值取决于具体情况:</p> + +<ul> + <li>如果节点是一个 {{domxref("document")}},或者一个 <a href="https://wiki.developer.mozilla.org/en-US/docs/Glossary/Doctype">DOCTYPE</a> ,则 <code>textContent</code> 返回 <code>null</code>。 + + <div class="blockIndicator note"> + <p>如果你要获取整个文档的文本以及 <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/API/CDATASection">CDATA data</a> ,可以使用 <code><a href="/zh-CN/docs/DOM/document.documentElement" title="DOM/document.documentElement">document.documentElement</a>.textContent</code>。</p> + </div> + </li> + <li>如果节点是个 <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/API/CDATASection">CDATA section</a>、注释、<a href="https://wiki.developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction">processing instruction</a> 或者 <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/API/Document/createTextNode">text node</a>,<code>textContent</code> 返回节点内部的文本内容,例如 {{domxref("Node.nodeValue")}}。</li> + <li>对于其他节点类型,<code>textContent</code> 将所有子节点的 <code>textContent</code> 合并后返回,除了注释和processing instructions。(如果该节点没有子节点的话,返回一个空字符串。)</li> +</ul> + +<p>在节点上设置 <code>textContent</code> 属性的话,会删除它的所有子节点,并替换为一个具有给定值的文本节点。</p> + +<h3 id="与_innerText_的区别">与 <strong>innerText </strong>的区别</h3> + +<p>不要被 <code>Node.textContent</code> 和 {{domxref("HTMLElement.innerText")}} 的区别搞混了。虽然名字看起来很相似,但有重要的不同之处:</p> + +<ul> + <li><code>textContent</code> 会获取<em>所有</em>元素的内容,包括 {{HTMLElement("script")}} 和 {{HTMLElement("style")}} 元素,然而 <code>innerText</code><strong> </strong>只展示给人看的元素。</li> + <li><code>textContent</code> 会返回节点中的每一个元素。相反,<code>innerText</code> 受 CSS 样式的影响,并且不会返回隐藏元素的文本, + <ul> + <li>此外,由于 <code>innerText</code> 受 CSS 样式的影响,它会触发回流( <a href="https://wiki.developer.mozilla.org/en-US/docs/Glossary/Reflow">reflow</a> )去确保是最新的计算样式。(回流在计算上可能会非常昂贵,因此应尽可能避免。)</li> + </ul> + </li> + <li><font face="Open Sans, Arial, sans-serif">与 </font><code>textContent</code> 不同的是, 在 Internet Explorer (小于和等于 11 的版本) 中对 <code>innerText</code> 进行修改, 不仅会移除当前元素的子节点,而且还会<em>永久性地破坏</em>所有后代文本节点。在之后不可能再次将节点再次插入到任何其他元素或同一元素中。</li> +</ul> + +<h3 id="与_innerHTML_的区别">与 <strong>innerHTML </strong>的区别</h3> + +<p>正如其名称,{{domxref("Element.innerHTML")}} 返回 HTML。通常,为了在元素中检索或写入文本,人们使用 <code>innerHTML</code>。但是,<code>textContent</code> 通常具有更好的性能,因为文本不会被解析为HTML。</p> + +<p>此外,使用 <code>textContent</code> 可以防止 <a href="https://wiki.developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting">XSS 攻击</a>。</p> + +<h2 id="Example" name="Example">例子</h2> + +<p class="brush: js">给出这个 HTML 片段:</p> + +<pre class="brush: js"><div id="divA">This is <span>some</span> text!</div></pre> + +<p>你可以使用 <code>textContent</code> 去获取该元素的文本内容:</p> + +<pre class="brush: js">let text = document.getElementById('divA').textContent; +// The text variable is now: 'This is some text!'</pre> + +<p>或者设置元素的文字内容:</p> + +<pre class="brush: js">document.getElementById('divA').textContent = 'This text is different!'; +// The HTML for divA is now: +// <div id="divA">This text is different!</div></pre> + +<h2 id="IE8_的替代方法">IE8 的替代方法</h2> + +<pre class="brush: js">// Source: Eli Grey @ https://eligrey.com/blog/post/textcontent-in-ie8 +if (Object.defineProperty + && Object.getOwnPropertyDescriptor + && Object.getOwnPropertyDescriptor(Element.prototype, "textContent") + && !Object.getOwnPropertyDescriptor(Element.prototype, "textContent").get) { + (function() { + var innerText = Object.getOwnPropertyDescriptor(Element.prototype, "innerText"); + Object.defineProperty(Element.prototype, "textContent", + // Passing innerText or innerText.get directly does not work, + // wrapper function is required. + { + get: function() { + return innerText.get.call(this); + }, + set: function(s) { + return innerText.set.call(this, s); + } + } + ); + })(); +}</pre> + +<h2 id="浏览器兼容性">浏览器兼容性</h2> + +<p>{{Compat("api.Node.textContent")}}</p> + +<h2 id="Specification" name="Specification">规范</h2> + +<table> + <thead> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('DOM WHATWG','#dom-node-textcontent','Node.textContent')}}</td> + <td>{{Spec2('DOM WHATWG')}}</td> + <td>No change vs. DOM4</td> + </tr> + <tr> + <td>{{SpecName('DOM4','#dom-node-textcontent','Node.textContent')}}</td> + <td>{{Spec2('DOM4')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('DOM3 Core','core.html#Node3-textContent','Node.textContent')}}</td> + <td>{{Spec2('DOM3 Core')}}</td> + <td>Introduced</td> + </tr> + </tbody> +</table> + +<h2 id="相关链接" style="margin-bottom: 20px; line-height: 30px; font-size: 2.14285714285714rem;">相关链接</h2> + +<ul> + <li>{{domxref("HTMLElement.innerText")}}</li> + <li>{{domxref("Element.innerHTML")}}</li> + <li><a href="http://perfectionkills.com/the-poor-misunderstood-innerText/">More on differences between <code>innerText</code> and <code>textContent</code></a> (blog post)</li> +</ul> |