如何使用jQuery替换页面上的文本而不替换标记内的标记和文本,例如:<a>,<input>,<button>,<textarea>,<input>,<select>
。
例如,这是HTML代码
<html>
<head>
<title>Testing</title>
</head>
<body>
Hello, this is a test replacing {REPLACE_ME} with <b>{REPLACED}</b>.
<br/><br/>
I want {REPLACE_ME} and {REPLACE_ME} to be <b>{REPLACED}</b>, however I don't want this <a href="#">{REPLACE_ME}</a> to become <a href="#">{REPLACED}</a>.
Same with <textarea>{REPLACE_ME}</textarea>, it shouldn't change.
<br/><br/>
</body>
我有这个jQuery来替换文本
var replaced = $("body").html().replace(/{REPLACE_ME}/gi,'<b>{REPLACED}</b>');
$("body").html(replaced);
这是JSFiddle
答案 0 :(得分:2)
$('body, body *:not(a,button,textarea,option)').contents().filter(function() {
return this.nodeType === 3;
}).each(function() {
var escaped = $('<div></div>').text($(this).text()).html();
$(this).replaceWith(escaped.replace(/\{REPLACE_ME\}/gi,'<b>{REPLACED}</b>'));
});
(我不需要包含input
,而我使用option
代替select
,因为option
是带有儿童文本节点的那个。)< / p>
答案 1 :(得分:0)
首先添加jquery文件
在正则表达式中为特殊字符
应用“\”var replaced = $("body").html().replace(/\{REPLACE_ME\}/gi,'<b>{REPLACED}</b>');
// see here^^^__________^^^^
$("body").html(replaced);
<强> see updated fiddle 强>
答案 2 :(得分:0)
var replaced = $("body").html().replace(/[^>]{REPLACE_ME}[^<]*/gi, '<b>{REPLACED}</b>');
$("body").html(replaced);