Jquery - 使用标记替换文本而不影响HTML

时间:2016-10-10 14:24:23

标签: javascript jquery html

我正在尝试解析DOM并将部分文本替换为令牌,例如检测电子邮件,然后将其替换为{{EMAIL}}字符串,而不更改HTML < /强> 给定以下HTML(例如 ,可以是不同的 ):

<div dir="ltr" style="direction: ltr; text-align: left;">
   this is <span style="font-style:italic;">my</span>
    email <span title="bla@bla.com" style="font-weight:bold;">bla@bla.com&nbsp;</span>
</div>

如何只更换测试部分,使其成为:

<div dir="ltr" style="direction: ltr; text-align: left;">
   this is <span style="font-style:italic;">my</span>
    email <span title="bla@bla.com" style="font-weight:bold;">{{EMAIL}}&nbsp;</span>
</div>

3 个答案:

答案 0 :(得分:1)

您可以在需要更改的DOM元素中添加 id =“myspan”,并在jquery的帮助下更改 innerHTML ,如下所示:

HTML:

<div dir="ltr" style="direction: ltr; text-align: left;">
   this is <span style="font-style:italic;">my</span>
    email <span id="myspan" style="font-weight:bold;">{{EMAIL}}&nbsp;</span>
</div>

JS:

$('#myspan').innerHTML = "{{EMAIL}}&nbsp;";

答案 1 :(得分:1)

您需要选择具有title属性的元素,并使用.filter()过滤所选元素,其中select元素在title属性中具有电子邮件地址。然后用新文本替换电子邮件地址。

&#13;
&#13;
$("div > [title]").filter(function(){
    return $(this).attr("title").match(/^[\w]+@[\w.]+\.[\w]+$/g);
}).text(function(i, text){
    return text.replace(/^[\w]+@[\w.]+\.[\w]+/g, "{{EMAIL}}");
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div dir="ltr" style="direction: ltr; text-align: left;">
   this is <span style="font-style:italic;">my</span>
    email <span title="bla@bla.com" style="font-weight:bold;">bla@bla.com&nbsp;</span>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

如果您需要查找和替换文本,可以随时使用JQuery的:contains选择器。 就像这里的例子一样: Find text string using jQuery?

您可以使用以获取所需的所有字符串 如果您没有搜索特定代码,请$('span:contains("bla@bla.com")甚至*:contains

获得所有实例后,您可以按照Mohammad

的建议进行文本替换