下面是我一直在搞乱的一些代码,它基本上采用包含HTML的字符串并删除class =“normal”的元素。为此,原型函数在实际删除元素及其所有内部内容之前删除所有换行符等。以下代码按预期工作:
var msg = '<p>Keeping this paragraph</p>\n<p class="normal">Removing this paragraph<br>\n</p>\n<p class="normal">Another paragraph to remove<br>\n</p>';
String.prototype.takeOut = function() {
return this.replace(/(\r\n|\n|\r)/gm," ")
.replace(/<p[^>]*class="normal"[^>]*>(.*?)<\/p>/g, '');
};
alert(msg.takeOut());
我的问题是我想通过这样的方法传递参数..
msg.takeOut('normal')
让原型函数使用该参数删除我们想要的任何类的元素:
msg.takeOut('foo')
msg.takeOut('bar')
以下是一个更详细的示例:
我知道“新的RegEx()”可能是解决方案,但我如何将其纳入已有的工作中?请不要jQuery!谢谢你的帮助!
答案 0 :(得分:0)
根据jsfiddle代码,尝试:
String.prototype.takeOut2 = function(i) {
var regExp = new RegExp('<p[^>]*class="'+i+'"[^>]*>(.*?)<\/p>', 'g');
return this.replace(/(\r\n|\n|\r)/gm," ")
.replace(regExp, '');
};
答案 1 :(得分:0)
由于Mindastic已经有一个使用Regex的工作解决方案,这只是一个替代方案,使用节点:
var msg = '<p>Keeping this paragraph</p>\n<p class="normal">Removing this paragraph<br>\n</p>\n<p class="normal">Another paragraph to remove<br>\n</p>';
String.prototype.takeOut = function(x) {
var temp = document.createElement('div'), targets = temp.getElementsByClassName(x);
temp.innerHTML = this;
while(targets.length){ temp.removeChild(targets[0]); }
return temp.innerHTML;
};
alert( msg.takeOut('normal') );