JS-查找字符串的所有实例并包装在定位标记中

我试图找出是否有可能用锚标记包装字符串的所有实例。


基本上,我们想在我们的网站上找到myBrand或的任何实例,myBrand.com并将它们包装在锚点中,例如<a href="/">myBrand</a>或<a href="/">myBrand.com</a>。


但是,无论它们在我页面的各个元素中的埋深有多深,我都希望能够找到此实例的所有实例,并查看它们是否已链接,这就是我遇到的问题。


编辑

我已将代码段编辑为现在的内容,但仍然遇到困难:


document.querySelectorAll('body').forEach(function(el){

  var text = el.innerHTML.match(/myBrand/g);

  

  console.log(text.parentElement); // how do i get the parent?

  

  if(isAnchor(text.parentElement)){

    //

  }else{

      var newtext = el.innerHTML.replace(/myBrand/g, '<a href="/">myBrand</a>');

    el.innerHTML = newtext;

  }

});


function isAnchor(str){

    return /^\<a.*\>.*\<\/a\>/i.test(str);

}

<body>


myBrand


<h1>myBrand.com</h1>


<p>This is a div that mentions myBrand</p>


<table>

<thead>

    <tr>

    <td>This is myBrand's table header</td>

    </tr>

</thead>

<tbody>

  <tr>

  <td>myBrand.com</td>

  </tr>

</tbody>

</table>


<a href="/">myBrand.com</a>


</body>


天涯尽头无女友
浏览 134回答 3
3回答

开心每一天1111

您可以为此使用XPath:function textContaining(phrase) {&nbsp; return document.evaluate(&nbsp; &nbsp; "//text()[contains(., '" + phrase + "')]",&nbsp; &nbsp; document,&nbsp; &nbsp; null,&nbsp; &nbsp; XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,&nbsp; &nbsp; null&nbsp; )}然后,您可以像这样遍历结果:var result = textContaining(phrase)for (var i = 0; i < result.snapshotLength; ++i) {&nbsp; var originalNode = result.snapshotItem(i)&nbsp; // ...}一旦获得了匹配#text节点的列表,您只需要过滤掉任何.parentElement是<a>标签的节点即可。另外,您可以使用jQuery.parents()函数检查父母的父母,以便解决诸如之类的情况<a><span>sometext</span></a>,而不仅仅是直接子女的情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript