jquery:如何选择不被html标签包围的文本?

Beer 
Vodka
rum
whiskey

你怎么选择啤酒? 还是朗姆酒? 在jquery? 他们没有被任何HTML标签包围….

如果您想要直接选择文本节点,建议不要使用jQuery。 为了澄清,获取一组包装的文本节点不是问题,但是将命令链接到一组包装的文本节点上具有不可预测的结果,或者不能与许多命令一起使用,因为它们期望包装的集合包含元素节点。

您可以通过过滤父项的子项来仅返回文本节点,即nodeType === 3但如果您的问题是关于对文本执行某些操作,则获取父元素并操作文本内容。 例如,

 $('#parentElement').html(); // html of parent element $('#parentElement').text(); // text content of parent element and any descendents $('#parentElement').contents(); // get all child nodes of parent element 

如果您想获取文本节点,以下是一种方法

 $('#parentElement').contents().filter(function() { return this.nodeType === 3 }); 

或者你可能想看看Karl Swedberg的Text Children插件 ,它也提供了各种不同的选项。

编辑:

在回应您的注释时,使用包装集中的文本节点的一种方法是将jQuery对象转换为数组,然后使用该数组。 例如,

 // get an array of the immediate childe text nodes var textArray = $('#parentElement') .contents() .filter(function() { return this.nodeType === 3 }) .get(); // alerts the text content of each text node $.each(textArray, function() { alert(this.textContent); }); // returns an array of the text content of the text nodes // NB Remember the differences in how different // browsers treat whitespace in the DOM textArray = $.map(textArray, function(e) { var text = $.trim(e.textContent.replace(/\n/g, "")); return (text)? text : null; }); 

就个人而言,我将它们包裹在然后你可以更容易地引用它们。 我正在使用Russ Cam的filter,所以道具(和+1)给他

 $(document).ready(function(){ $('body').contents().filter(function(){ return this.nodeType === 3 }).each(function(){ $(this).wrap(''); }) }) 

然后你可以使用$('.text')和选择器来更轻松地访问它们。

使用.contains方法。 请参阅使用jQuery查找文本字符串?

好吧它必须被某些东西包围,即使它只是标签。 如果你的HTML文档中只写了一个,我认为浏览器会隐式在你的DOM中放入一个

话虽如此,看看这个:

如何使用jQuery选择文本节点?

一个小DOM改变怎么样? 首先选择包含所需字符串的节点,而不是运行一个函数,该函数用“string”替换每个出现的“string”

我们不需要外部插件

 
Vodka
Rum
Whiskey

我已经快速创建了这个脚本,所以不要严厉地判断:)(并且它是2:28 AM :-D)

在我看来,你的文本实际上应该是一个列表(ol / ul)。 这将为您提供jQuery的一些语义钩子,使事情变得更加容易。

试试这个

 $("div:contains('Beer')").css("text-decoration", "underline");