一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
A regex to remove id, style, class attributes from HTML tags in JS
我在javascript中得到了一个html字符串,我想使用regex删除html标记中的id、样式和类属性,例如:
New York City.<div style="padding:20px" id="upp" class="upper"><div style="background:#F2F2F2; color:black; font-size:90%; padding:10px 10px; width:500px;">This message is.</div></div>
我希望这个字符串变成:
New York City.<div><div>This message is.</div></div>
您可以利用所有浏览器中可用的DOM功能,而不是使用正则表达式解析HTML(这是个坏主意)。我们首先需要能够遍历DOM树:
var walk_the_DOM = function walk(node, func) {
func(node);
node = node.firstChild;
while (node) {
walk(node, func);
node = node.nextSibling;
}
};
现在解析字符串并操作DOM:
var wrapper= document.createElement('div');
wrapper.innerHTML= '<!-- your HTML here -->';
walk_the_DOM(wrapper.firstChild, function(element) {
if(element.removeAttribute) {
element.removeAttribute('id');
element.removeAttribute('style');
element.removeAttribute('class');
}
});
result = wrapper.innerHTML;
另请参阅此JSFiddle。
如果您愿意删除除div标记名之外的所有内容-
string=string.replace(/<(div)[^>]+>/ig,'<$1>');
如果html为大写,则返回<DIV>
。
如果您只想删除属性,那么regex是错误的工具。我建议:
function stripAttributes(elem){
if (!elem) {
return false;
}
else {
var attrs = elem.attributes;
while (attrs.length) {
elem.removeAttribute(attrs[0].name);
}
}
}
var div = document.getElementById('test');
stripAttributes(div);
JS Fiddle演示。
我使用了这个
var html = 'New York City.<div style="padding:20px" id="upp"
class="upper"><div style="background:#F2F2F2; color:black; font-size:90%; padding:10px 10px; width:500px;">This message is.</div></div>';
function clear_attr(str,attrs){
var reg2 = /'s*('w+)='"[^'"]+'"/gm;
var reg = /<'s*('w+).*?>/gm;
str = str.replace(reg,function(match, i) {
var r_ = match.replace(reg2,function(match_, i) {
var reg2_ = /'s*('w+)='"[^'"]+'"/gm;
var m = reg2_.exec(match_);
if(m!=null){
if(attrs.indexOf(m[1])>=0){
return match_;
}
}
return '';
});
return r_;
});
return str;
}
clear_attr(html,[]);
使用正则表达式。这是快速的(在生产时间)和容易的(在开发时间)。
htmlCode = htmlCode.replace(/<([^ >]+)[^>]*>/ig,'<$1>');
尝试使用正则表达式解析HTML会导致问题。这个答案可能有助于解释它们。如果你正在使用jQuery,你可能可以做这样的事情:
var transformedHtml = $(html).find("*").removeAttr("id").removeAttr("style").removeAttr("class").outerHTML()
为了实现这一点,您需要使用此处描述的outerHTML插件。
如果你不想使用jQuery,那就更麻烦了。关于如何将字符串转换为DOM元素的集合,这些问题可能有一些有用的答案:将HTML字符串转换成DOM元素?,使用内置的DOM方法或原型从HTML字符串创建新的DOM元素。您可以使用内置的removeAttr函数循环遍历元素并删除属性。我没有时间也没有动力为你弄清楚所有的细节。
一个简单的脚本解决方案应该类似于:
function removeProperties(markup) {
var div = document.createElement('div');
div.innerHTML = markup;
var el, els = div.getElementsByTagName('*');
for (var i=0, iLen=els.length; i<iLen; i++) {
el = els[i];
el.id = '';
el.style = '';
el.className = '';
}
// now add elements to the DOM
while (div.firstChild) {
// someElement.appendChild(div.firstChild);
}
}
一个更通用的解决方案是将属性名称作为额外的参数,或者说是一个空格分隔的字符串,然后迭代这些名称以删除它们。
我不知道RegEx,但我肯定知道jQuery。
将给定的HTML字符串转换为DOM元素,对其进行解析,并返回其内容。
function cleanStyles(html){
var temp = $(document.createElement('div'));
temp.html(html);
temp.find('*').removeAttr('style');
return temp.html();
}
相关文章:
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 从iframe中删除id
- 正在删除ID为(jointJS)的元素
- 使用jquery删除id创建的元素
- 从 Zend 窗体元素中删除 id 属性
- 从 JavaScript 数组中删除 id 的更智能方法
- 我应该如何从 json 的所有级别(模型、数组)中删除“id”键
- 删除 Id 高于单击的按钮
- JQuery 删除 id 不包含字符串的元素
- Apache Cordova,SQLite,从[表]中删除id=?不会返回
- 删除id为mongodb的多行
- 如何在刷新后删除id(#)目标
- 如何删除id为null的所有元素
- JQuery dataTable删除id和类的结果行需要在值中搜索
- 如何从粘贴的HTML中删除id
- 如何从backbone.js url中删除id属性
- j查询如何从锚点中删除 id 标记
- 使用 jQuery/javascript 从 HTML 中删除 id 属性
- 需要在“更改”时将/删除id附加到隐藏字段中
- 删除id会杀死页面上的所有javascript