查找文本节点

是否有一个聪明的jQuery选择器用于选择这样的文本节点:

one two three

我想从上面的标记中获取三个并将其包装在如下的强标记中:

 
one two three

以下是如何使用jQuery选择文本节点:

 var x = $('div') .contents() .filter(function() { return this.nodeType == 3; //return this.nodeType == Node.TEXT_NODE; this works unless using IE 7 }); 

在你的例子中,x将在索引0处包含’one’,在索引1处包含’three’。就像Keith Rousseau所说,你不能真正抓住那个文本,但是如果你知道它将是最后一个你可以得到它像这样:

 var elemThree = x[x.length-1]; 

您还可以添加如下强标记:

 $(x[x.length-1]).wrap(""); 

这个问题描述了用jQuery选择文本节点(我的第一个代码片段)。

不是没有一些编程。 如果您的主DIV有ID或类,您可以这样做:

 var html = $("#my_div").html(); var array = html.split(""); array[1] = "" + array[1] + ""; html = array[0] + "" + array[1]; $("#my_div").html(html); 

在生成标记时,有没有理由不能在一些html元素中包装三个? 实际上不可能从文本中获取一些随机单词并将其包装起来 – 除非你知道它总是在div中的绝对最后一个单词。 如果是这样,你可以这样做来得到这个词:

 var txt = $(div).text(); var txtArr = txt.split(); var wordToWrap = txtArr[txtArr.length - 1]; 

我不确定你可以用直接jQuery轻松做到这一点,除非你在写出来时可以将那个单词包装在另一个标签中。 您可以使用正则表达式,例如:

 function wrapWithTag(tagname, element, text) { var html = element.html(); var rx = new RegExp('(' + text + ')', "gi"); element.html(html.replace(rx, '<' + tagname + '>$1')); } $(function(){ wrapWithTag('strong', $('div'), 'three'); }); 

如果您尝试匹配元素中不同位置的文本,则正则表达式将需要一些调整。

 //finds most inner element that has 'three' in it var el = $(':contains(three):last'); //actual replacement el.html(el.html().replace('three', 'three')); 

看看这个jQuery高亮插件: http : //tinyurl.com/6rk6ae

它可能不会完全符合您的要求,但源代码包含使用文本节点并有效修改它们周围的DOM的良好示例。

CSS无法选择文本节点

jQuery使用只选择元素的css3选择器。 要获得所需效果,您需要执行以下操作:

 var div = $('find the div')[0]; var txtNode = div.lastChild var str = document.createElement('strong') str.appendChild(txtNode) //removes the text node from the dom. div.appendChild(str) 

如果它不是关于最后一个词,但关于div的纯内容试试这个:

 var chld=$('div').children().clone(); $(div).children().remove(); //now do what You want with the text, eg. $(div).html(''+$(div).text()+''); //or something like that :) $(div).prepend(chld); //This is a bottleneck, cause You have to know that //all the text was after all the markup, but it refers to Your example.