重複の可能性:
jQueryの.text()は内部的にどのように機能しますか?
innerHTML
に相当するテキストを探しています。
<p>Hello, <i>World!</i></p>
その後、innerText(p)
を返す必要がありHello, World!
ます。
注:私はjQueryのtext()
機能を知っています。余分な空白を挿入するなど、一部のノードで特別な処理を実行できるように、どのように実装されているかを知りたいです。
重複の可能性:
jQueryの.text()は内部的にどのように機能しますか?
innerHTML
に相当するテキストを探しています。
<p>Hello, <i>World!</i></p>
その後、innerText(p)
を返す必要がありHello, World!
ます。
注:私はjQueryのtext()
機能を知っています。余分な空白を挿入するなど、一部のノードで特別な処理を実行できるように、どのように実装されているかを知りたいです。
getText() のソースは次のとおりです。 質問から取得: How does jQuery's .text() work, internal?
// Utility function for retreiving the text value of an array of DOM nodes
Sizzle.getText = function( elems ) {
var ret = "", elem;
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
// Get the text from text nodes and CDATA nodes
if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
ret += elem.nodeValue;
// Traverse everything else, except comment nodes
} else if ( elem.nodeType !== 8 ) {
ret += Sizzle.getText( elem.childNodes );
}
}
return ret;
};
これはどう?
var getInnerText = function (element) {
var nodes = element.childNodes,
i = 0,
len = nodes.length,
text = '';
for (; i < len; i++) {
if (nodes[i].nodeType === 3 || nodes[i].nodeType === 4) {
// 3 means text node, 4 means cdata
text += nodes[i].nodeValue;
} else {
text += getInnerText(nodes[i]);
}
}
return text;
};
それから:var innerText = getInnerText(myElement);
innetHTML の代わりに innerText プロパティを使用します。
例...
<html>
<body>
<p id="myP">Sample Text inside a <b>p</b> element <a href="#"> this is a link </a></p>
<button onclick="alert(myP.innerHTML);">InnerHTML</button>
<button onclick="alert(myP.innerText);">InnerText</button>
</body>
</html>