我想替換代碼中的特定單詞而不影響HTML網址和屬性。 我試圖替換每個p標籤,但div標籤中有一些內容也需要替換。替換HTML標記中的文本而不影響標記屬性和鏈接
$("p:not(:has(img))").each(function(){
var b = $(this).html().replace(/oldtext/g, "newtext");
$(this).html(b);
});
我想替換代碼中的特定單詞而不影響HTML網址和屬性。 我試圖替換每個p標籤,但div標籤中有一些內容也需要替換。替換HTML標記中的文本而不影響標記屬性和鏈接
$("p:not(:has(img))").each(function(){
var b = $(this).html().replace(/oldtext/g, "newtext");
$(this).html(b);
});
我寫了一個香草的JavaScript功能對你來說,它不會改變任何東西,但oldtext
到newtext
:
replaceAllTextWith = function (jq, oldtxt, newtxt) {
for (var j = 0; j < jq.length; j++) {
var el = jq[j];
for (var i = 0; i < el.childNodes.length; i++) {
var cnode = el.childNodes[i];
if (cnode.nodeType == 3) {
console.log(el.tagName);
var nval = cnode.nodeValue;
//add .toLowerCase() here if you want to consider capital letters
if (-1 < nval.indexOf(oldtxt)) {
cnode.nodeValue = nval.replace(new RegExp(oldtxt, "g"), newtxt);
}
} else if (cnode.nodeType == 1) {
replaceAllTextWith([cnode], oldtxt, newtxt);
}
}
}
};
你可以這樣調用它:
replaceAllTextWith($("p:not(:has(img))"), "oldtext", "newtext")
這是一個有趣的任務,因爲jquery的html()
只顯示選擇器內的html,但不顯示嵌套元素的html
解決方法是逐行分解html代碼並檢查是否存在某個元素(img),以便執行替換。
這是HTML:
<div id="a_unique_wrap_id">
<p><img src="https://www.google.pt/images/srpr/logo11w.png" /><h1>abc</h1></p>
<p><img src="https://www.google.pt/images/srpr/logo11w.png" />def</p>
<p><h1><span><b>abc</b></span></h1></p>
<div><h1><span><b>abc</b></span></h1></div>
<div><h1><span><b>def</b></span></h1></div>
</div>
,這是JavaScript:
selector=$('div');
exclude='<img';
str=(selector.html().split('\n'));
l=str.length;
output='';
for(x=0;x<l;x++){
if(str[x].indexOf(exclude)>=0){
output+=str[x];
}else output+=str[x].replace(/abc/g, "newtext");
}
$('#a_unique_wrap_id').html(output);
工作的例子是在這裏:http://jsfiddle.net/hbrunar/w6BfL/6/
告訴我們你嘗試過什麼? –
您需要使用文本節點。 – SLaks
對不起@SLaks我是jQuery初學者你是什麼意思的文本節點 –