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

时间:2010-07-02 11:58:17

标签: 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();
});

代码工作正常,但是如果图像或链接的title或alt属性与我要替换html的文本相同,那么它就会被删除,因为脚本会在alt或title标记中放置链接。 / p>

祝你好运


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

<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>

2 个答案:

答案 0 :(得分:2)

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

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(),它会循环播放,如果文本在那里,则用相应的链接替换每个匹配。

答案 1 :(得分:0)

尝试使用jQuery .attr()标记对href属性或.text()上的标记进行替换,这是您希望更改的内容。

否则,显示一些标记可能有助于查看您想要的内容(在示例之前/之后)。

.attr('href',yournewstuff);

OR

.text(yournewstuff);