2010-07-02 24 views
1

我有以下代码:的Javascript替换的问题(与alt和title atribbutes)

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或title标签中。

问候


我试图做这样的事情:

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

有一个原因,他们说[你不应该混合正则表达式与html](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)。 **他们不要混合使用**使用dom解析器。 – Amarghosh 2010-07-02 12:05:34

回答

0

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

否则,它可能有助于显示一些标记以查看究竟是什么(示例之前/之后)。

.attr('href',yournewstuff); 

OR

.text(yournewstuff); 
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()这些文件节点,它将循环浏览,如果文本在那里,则将每个匹配替换为相应的链接。

+0

+1 - 我喜欢使用内容,过滤器和nodeType。非常好的答案。 – Krunal 2010-07-02 12:38:24

+0

该脚本的作品,但它从BD的文章细节惠特标签,例如:

My text here...

iulian 2010-07-02 12:40:16

+0

@iulian - 这是一个更新的例子,试试看:http://jsfiddle.net/7C9DC/2/ – 2010-07-02 12:57:25