若是我有这样的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