2009-11-10 42 views
0

有沒有辦法告訴jQuery你想要在text()html()之後應用到它之後?很難解釋,更容易顯示:對jQuery中的html()和text()的直接操作

$("#someElement").html().replace(oldWord, newWord, "g"); 

以上不會改變DOM,你必須做的:

$("#someElement").html($("#someElement").html().replace(oldWord, newWord, "g")); 

這是在一個痛**。

編輯:我想看到的雖然是做這個方法可行:

$("#someElement").html(.replace(oldWord, newWord("g")); 

不知道這將是可能的,甚至是實際的,真的。有沒有理由不能這樣做?

+0

只是一個謹慎的話,如果你還沒有想到它。 HTML上的搜索和替換有兩個複雜性。 1.替換將應用於HTML標記名稱和屬性,這可能會或可能不會。 2.某些「詞語」可能無法按預期替換,因爲它們被標籤拆分,例如[span class =「firstChar」] D [/ span] direct action。替換「直接」不會因爲注入關閉SPAN標籤而找到它。 – 2009-11-10 13:15:46

回答

3

你可以把這個變成一個簡單的插件確實容易:

jQuery.fn.replaceHTML = function (old, new) { 
    return this.each(function() { 
     var $t = $(this); 
     $t.html($t.html().replace(old, new); 
    }); 
}; 

// usage: 
$('#myElement').replaceHTML('foo', 'bar'); 
$('#anotherElement').replaceHTML(/f(?:oo|u)/g, 'bar'); 

這不會破壞你的鏈接之一:

$('#blah').replaceHTML('abc', 'def').hide(); 

道格d評論,只記得正則表達式+ html可能是不可預測的,除非你非常小心,否則可能會導致問題。

0

不,您將HTML代碼作爲字符串獲取,並且必須在更改後再放回該字符串。

對於像這樣的工作,html函數將不得不返回一個對象,該對象具有可用於更改內容的方法,如replace。但是,如果您想要應用多個更改(這幾乎是鏈接方法的一部分),那麼這將不是有效的,因爲它必須獲取HTML代碼並將其放回每次更改。當您將HTML代碼作爲字符串獲取時,您可以隨心所欲地做任何事情,並在完成後將其恢復。

3

沒有那些函數返回字符串,而不是jQuery。你首先需要獲得價值,執行你的魔法,然後設置價值。你必須用普通的javascript來做到這一點,但是語法可能不那麼麻煩。

var elem = $("#someElement").get(0); 
elem.innerHTML = elem.innerHTML.replace(oldWord,newWord,"g"); 

個人而言,我會堅持使用jQuery,但將其分開以使其更具可讀性。

var elem = $("#someElement"); 
var html = elem.html(); 
elem.html(html.replace(oldWord,newWord,"g"));