获取每个div取决于文本的文本值

我有这个结构:

some text
(This text is good)
some text2
some text3
some text
(This text is good)
some text2
some text3
some text
(This text is good)
some text2
some text3

我想把文本放在div中,但只有带有这个词的文本:good。 并替换。 所以我这样做:

 $("#thetable div:contains('good')").each(function () { try { console.log($(this).text()); console.log("------------------------------"); } catch (ex) { } }) 

但是console.log告诉我,每个日志不仅包含具有良好文本的div的文本,还包括其他两个。 它是印刷:

 (This text is good)some text2some text3 

因此,我想只使用带有文本的div,并将此文本替换为另一个文本。

谢谢!

基本上:我想得到div,我有“好”(或任何我想要的单词),并在此div插入/替换文本。 在所有文档中查找,或者,特别是在文档的一部分中查找,如下例所示:在表格中。

因为你有一个div包含那3个div

一种可能的解决方案是仅获取最终元素

 $("#thetable div:contains('good'):not(:has(*))").each(function () { }) 

演示: 小提琴

这个表达式选择所有“div”包括父母。 你可以添加条件。

 $("#thetable div:contains('good')").each(function () { try { if ($('div', this).length < 1) { // test child presence console.log($(this).text()); console.log("------------------------------"); } } catch (ex) { } }) 

http://jsfiddle.net/jF6KU/

对我来说,Arun P Johny代码是最好的解决方案
所以我试着向你解释一些概念
Arun P Johny代码不选择最后一个元素,但选择没有子元素的项目。
他的代码是非常优雅和高性能唯一的缺点是,如果你输入像这样的HTML,它不起作用

 
(This text is good)
(This text is good)

因为在这种情况下,代码只会选择最里面的元素

尝试这样的事情。

 $("#thetable div").each(function () { try { var val = $(this).text(); if ( val.indexOf('good') !== -1 ) { console.log($(this).text()); console.log("------------------------------"); } } catch (ex) { } }) 

我相信,更快(虽然不可否认,灵活性更低)的方法是使用vanilla JS。 我应该用JsPerf测试一下

这将为您列出的html结构提供3次点击:

  var containers = document.querySelectorAll('#thetable div div div'); var i, n = containers.length; for (i=0; i 

很简单,您可以使用jquery最近函数来获取最近的div。 试试下面的代码

 $("#thetable tr div div ").find("div:contains('good')").closest('div') 

检查这个jsfiddle

我找到了一个解决方案,但似乎过于冗长。
我在社区发布了一个问题( 这里 ),但到目前为止还没有人正确回答。
但是我给你留下了我的代码,让你得到一个包含字符串和另一个包含字符串的div的元素(查看注释)

        
(This text is good)
(This text is good)
(This text is good)
some text1
some text2
some text
(This text is good)
some text1
some text2
some text
(This text is good)
some text1
some text2

我希望这个解决方案可以帮到你。