如何用javascript找到一些文本后的元素?

时间:2011-03-13 18:12:40

标签: javascript jquery

我的HTML文件里面有一些文字(如'bla-bla')。我希望在此文本节点之后获得特定元素(如<a href=...)。

我怎么能用纯JavaScript或jQuery做到这一点?

示例HTML:

<div>
  jdlgjalfad dfaldfdalf bla-bla fdfadf afd <br/> 
  <table>...
    <td></td>
  </table>
  <a href="some_link">here</a>
</div>

2 个答案:

答案 0 :(得分:0)

您可以使用contains查找包含所选文本的元素,然后对每个元素进行迭代,使用基于搜索字符串的替换替换文本。请注意,即使元素后代包含文本,contains也会返回匹配项,因此如果您有嵌套元素或者根据元素是否具有内部元素进行过滤,则应该指定一些元素类型。

$('div:contains("bla-bla")').each( function() {
   var txt = $(this).text();
   var insert = 'bla-bla<a href="...">(link)</a>';
   $(this).text( txt.replace( /bla-bla/g, insert ) );
});

$(':contains("bla-bla")')
    .filter( function() { return $(this).children().length == 0; } )
    .each( function() {
       var txt = $(this).text();
       var insert = 'bla-bla<a href="...">(link)</a>';
       $(this).text( txt.replace( /bla-bla/g, insert ) );
});

答案 1 :(得分:0)

$('div:contains('bla-bla')).find('a') 

将在您的示例中起作用,但可能不适用于您的实际用例。 :contains包含选择器会在其中找到包含一些字符串的div,但如果需要更多上下文,则可能需要使用正则表达式来查找所需的特定文本:

$('div').each(function(){
  if (/funky-regex/.test($(this).text())) {
    $(this).find('a').doSomethingHere();
  }
});

用一个或多个jquery方法替换doSomethingHere()。适当的选择取决于您的具体用例。