2010-07-02 66 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