Javascript 替换问题(使用 alt 和 title 属性)

标签 javascript jquery regex

我有以下代码:

function getArticleContent() {

    var toPromote = 'example';

    var toReplace = '<a href="/tags/'+toPromote+'">'+toPromote+'</a>';

    var content = $(".a-entry").text();

    if (content.search(toPromote) > -1)
    {           
       $('.a-entry').html($('.a-entry').html().replace(new RegExp(toPromote, "g"), toReplace) );
    }
    else
    {
        //
    }
}
$(document).ready(function() {
    getArticleContent();
});

代码工作正常,但如果图像或链接的标题或 alt 属性与我要替换 html 的文本相同,它就会损坏,因为脚本将链接放在 alt 或标题标签中。

最好的问候


我正在尝试做这样的事情:

<div id="article">
 <p>Some text here, bla bla.</p>
</div>

在 JS 函数之后我想成为:

<div>
    <p>Some text <a href="/tags/here">here</a>, bla bla.</p>
</div>

最佳答案

你可以这样做,虽然可能有更短的方法(文本节点对我来说非常很少见):

function getArticleContent() {
  var toPromote = 'example';
  $(".a-entry").contents().filter(function() { return this.nodeType == 3; })
    .each(function() {
      if(this.nodeValue.indexOf(toPromote) > -1)
        $(this).replaceWith(this.nodeValue.replace(new RegExp(toPromote, "g"), 
            function(m) { return '<a href="/tags/'+m+'">'+m+'</a>'; })
        );
    });
}
$(getArticleContent);​

You can try a demo here .此过滤器专门针对文本节点 nodeType == 3 , 对于 .each()其中,它循环遍历,如果文本存在,则用相应的链接替换每个匹配项。

关于Javascript 替换问题(使用 alt 和 title 属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3165424/

相关文章:

javascript - 检测可滚动元素内的滚动位置

javascript - 为什么我创建一个对象时,控制台说它的原型(prototype)是Object,而JS中是Object.prototype?

JavaScript 使用全局变量

正则表达式检测字符串中是否包含 printf 占位符

c# - C# 中的正则表达式模式\K 替代方案

regex - 如何编写正则表达式以强制最多 255 个字符?

javascript - 我的 html 中的符号未正确加载

javascript - 在javascript中将字符串转换为对象数组的最佳方法?

javascript - Jquery $.when 阻止代码执行和 UI 更新?

jQuery 获取输入日期时间本地值