若是我有這樣的html: html
<li id="listItem"> This is some text <span id="firstSpan">First span text</span> <span id="secondSpan">Second span text</span> </li>
我正在嘗試使用.text()
僅檢索字符串「 This is some text」,可是若是我要說$('#list-item').text()
,則會獲得「 This is some text」 textSecond span text」。 node
有沒有一種方法能夠獲取(並可能經過.text("")
類的東西刪除)標籤中的自由文本,而不是其子標籤中的文本? this
HTML不是我編寫的,所以這是我必須使用的。 我知道寫html時只將文本包裝在標籤中會很簡單,可是html是預先編寫的。 spa
不是代碼: .net
var text = $('#listItem').clone().children().remove().end().text();
只是爲了jQuery而成爲jQuery嗎? 當簡單的操做涉及那麼多的連接命令和那麼多的(沒必要要的)處理時,也許是時候編寫jQuery擴展了: code
(function ($) { function elementText(el, separator) { var textContents = []; for(var chld = el.firstChild; chld; chld = chld.nextSibling) { if (chld.nodeType == 3) { textContents.push(chld.nodeValue); } } return textContents.join(separator); } $.fn.textNotChild = function(elementSeparator, nodeSeparator) { if (arguments.length<2){nodeSeparator="";} if (arguments.length<1){elementSeparator="";} return $.map(this, function(el){ return elementText(el,nodeSeparator); }).join(elementSeparator); } } (jQuery));
致電: htm
var text = $('#listItem').textNotChild();
這些參數是在遇到不一樣狀況的狀況下,例如 element
<li>some text<a>more text</a>again more</li> <li>second text<a>more text</a>again more</li> var text = $("li").textNotChild(".....","<break>");
文字將具備價值: rem
some text<break>again more.....second text<break>again more
簡單答案: 字符串
$("#listItem").contents().filter(function(){ return this.nodeType == 3; })[0].nodeValue = "The text you want to replace with"
使用額外的條件來檢查innerHTML和innerText是否相同。 僅在這種狀況下,替換文本。
$(function() { $('body *').each(function () { console.log($(this).html()); console.log($(this).text()); if($(this).text() === "Search" && $(this).html()===$(this).text()) { $(this).html("Find"); } }) })
你能夠試試這個
alert(document.getElementById('listItem').firstChild.data)
更輕鬆快捷:
$("#listItem").contents().get(0).nodeValue