Javascript JS/JQuery-如何迭代html(),替换字符串的每个实例
我使用标签来标识消息。此标签类似于DHHS1709PJ。您可以在下面的HTML中看到,它有时是元素的id,有时是元素的值,有时是href或aria控件中的值。我一直在努力寻找将整个块解析为字符串的方法,以便使用正则表达式替换标记的每个实例,无论它是属性还是值 我有以下HTML:Javascript JS/JQuery-如何迭代html(),替换字符串的每个实例,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,我使用标签来标识消息。此标签类似于DHHS1709PJ。您可以在下面的HTML中看到,它有时是元素的id,有时是元素的值,有时是href或aria控件中的值。我一直在努力寻找将整个块解析为字符串的方法,以便使用正则表达式替换标记的每个实例,无论它是属性还是值 我有以下HTML: <li id='msg-DHHS1709PJ' class="draggable"> <div class="panel panel-primary"> <div c
<li id='msg-DHHS1709PJ' class="draggable">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"> Message
<a id="DHHS1709PJ" class="pull-right cancel" href="#">
<i class="fa fa-times-circle"></i>
</a>
<a class="pull-right" data-toggle="collapse" data-perform="panel-collapse" href="#body-DHHS1709PJ" aria-expanded="true" aria-controls="body-DHHS1709PJ">
<i class="panel-toggle fa fa-minus"></i>
</a>
</h3>
<span>Voiced by: Joe</span>
</div>
<div id="body-DHHS1709PJ" class="panel-wrapper collapse in">
<div class="panel-body">
Message Copy
</div>
</div>
</div>
</li>
用最终代码编辑
最后,我不得不将此函数移动到我的可排序表的接收部分:
receive: function(e, ui){
var workspace = $( '#workspace' ).html();
var tag = $(ui.item).find('#msg-tag').text();
var new_tag = tag;
var var_created = false;
var count = 1;
while (var_created == false) {
if ( $(workspace).find( "#"+new_tag ).length) {
new_tag += "-x"+count;
count += 1;
}
else {
var re = new RegExp(tag, "g")
$(this).html($(this).html().replace(re, new_tag));
$( '#body-'+new_tag ).closest('li').attr('id', new_tag);
var_created = true;
}
}
$(this).find('.cancel').show();
$(this).find('.panel').removeClass('panel-primary').addClass('panel-info');
ui.item.find('.panel').removeClass('panel-primary').addClass('panel-success');
}
});
在最高层次上,
$(document.body).html($(document.body).html().replace(regex, replacement));
也许你想做什么就做什么
但是,请注意,可能会丢失任何事件处理程序或附加到DOM元素的其他数据
可选地,如果要替换所有属性,可以考虑迭代每个DOM元素的属性:
在哪里解析?在服务器上?在文本编辑器中?这是发送到浏览器的页面的HTML吗?这是JavaScript程序中的一些文本吗?为了回答这个问题,需要做的假设太多了。但是,让我们假设它在web浏览器中变成了DOM(只是为了给出一些定义),假设每个标记的位置不能改变,我至少会给每个元素一个单独的
数据-
属性,告诉您标记存在的位置。所以像数据标签loc=“id”
和数据标签loc=“href”
。然后,您可以选择具有data tag loc
属性的所有元素,并轻松判断标记的位置。var tag\u elems=document.queryselectoral(“[data tag loc]”)
然后循环集合并执行var tag_val=elem.getAttribute(elem.getAttribute(“数据标记loc”))代码>你的第一行代码在路上帮助了我。用我的最终代码更新了问题。
$(document.body).html($(document.body).html().replace(regex, replacement));
$('*').each(function(i, e) {
$.each(e.attributes, function(i, attrib){
$(e).attr(attrib.name, attrib.value.replace(regex, replacement));
});
});