<div class="title">
I am text node
<a class="edit">Edit</a>
</div>
我希望得到「我是文本節點」,不希望刪除「編輯」標籤,並且需要跨瀏覽器解決方案。如何獲取元素的文本節點?
<div class="title">
I am text node
<a class="edit">Edit</a>
</div>
我希望得到「我是文本節點」,不希望刪除「編輯」標籤,並且需要跨瀏覽器解決方案。如何獲取元素的文本節點?
var text = $(".title").contents().filter(function() {
return this.nodeType == Node.TEXT_NODE;
}).text();
這得到所選元素的contents
,並應用過濾得到的第一個childNode的的nodeValue功能。過濾器函數只返回文本節點(即帶有nodeType == Node.TEXT_NODE
的那些節點)。
$('.title').clone() //clone the element
.children() //select all the children
.remove() //remove all the children
.end() //again go back to selected element
.text(); //get the text of element
我認爲標準JavaScript的方法必須是'innerText' – reporter
這不符合OP想要的方式 - 它將獲得'a'元素中的文本:http://jsfiddle.net/ekHJH/ –
@James Allardice - 我已經完成了jquery解決方案,現在這將w ork ................. –
儘管這樣會起作用,但它取決於子節點的位置。如果(何時)發生變化,則會中斷。 – Armstrongest
如果你的意思是讓元素中的第一個文本節點的值,該代碼將工作:http://jsfiddle.net/ZkjZJ/
這將忽略空格爲:
var oDiv = document.getElementById("MyDiv");
var firstText = "";
for (var i = 0; i < oDiv.childNodes.length; i++) {
var curNode = oDiv.childNodes[i];
if (curNode.nodeName === "#text") {
firstText = curNode.nodeValue;
break;
}
}
您可以在這裏的行動看到這那麼,你從來沒有得到空白textNodes..code使用核心Javascript。
var oDiv = document.getElementById("MyDiv");
var firstText = "";
for (var i = 0; i < oDiv.childNodes.length; i++) {
var curNode = oDiv.childNodes[i];
whitespace = /^\s*$/;
if (curNode.nodeName === "#text" && !(whitespace.test(curNode.nodeValue))) {
firstText = curNode.nodeValue;
break;
}
}
檢查它的jsfiddle: - http://jsfiddle.net/webx/ZhLep/
另一個本地JS解決方案,可以爲「複雜」或深度嵌套元素有用的是使用NodeIterator。將NodeFilter.SHOW_TEXT
作爲第二個參數(「whatToShow」),並遍歷元素的文本節點子節點。
var root = document.getElementById('...'),
iter = document.createNodeIterator (root, NodeFilter.SHOW_TEXT),
textnode;
while (textnode = iter.nextNode()) {
// do something with the text node
}
您還可以使用TreeWalker
。兩者的區別在於NodeIterator
是一個簡單的線性迭代器,而TreeWalker
允許您通過兄弟和祖先進行導航。
您也可以使用XPath的text()
節點測試來獲取文本節點。例如
var target = document.querySelector('div.title');
var iter = document.evaluate('text()', target, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE);
var node;
var want = '';
while (node = iter.iterateNext()) {
want += node.data;
}
ES6版本,返回第一個#text節點內容
const extract = (node) => {
const text = Array.from(node.childNodes).find(f => f.nodeName === '#text');
return text ? text.textContent.trim() : '';
}
這個問題是幾乎相同http://stackoverflow.com/questions/3172166/getting-the-contents- - 看到這些答案爲一個普通的JS版本的詹姆斯的答案 – Mala