0

我有一个标签,里面有一些真实的内容。我希望能够使用 javascript 删除该标签及其所有内容srt.replace()

我通常会使用类似的东西,jQuery('.tag-class').remove()但在这种情况下,jQuery 不是一个选项。

我相信一个正则表达式是我正在寻找的,但经过相当长的一段时间后,我并不比我开始时更接近。

我需要这样做。

var myContent = 'bla bla bla <div class="remove-me">variable content here</div> something something';
// run some cool replace() here and get
// bla bla bla  something something

任何建议都会很棒!

4

3 回答 3

2

如果场景是这样的,你可以简单地使用 vanilla JavaScript DOM 修改:

HTML:

<div id="abc">bla bla bla <div class="remove-me">variable content here</div> something something</div>

JavaScript:

var container = document.getElementById("abc"),
    items = container.getElementsByClassName("remove-me"),
    i = 0,
    len = items.length;

for( ; i < len; i++ ) {
    items[i].parentNode.removeChild(items[i]);
}

或者,如果您想去除所有 HTML 标签:

var container = document.getElementById("abc");

container.innerHTML = container.innerHTML.replace(/(<([^>]+)>)/ig,"");
于 2012-11-11T22:45:51.340 回答
2

不要使用正则表达式来修改 HTML。

HTML 被设计为由解析器解析,正则表达式(本身)不擅长解析文档标记。最好将 HTML 作为 DIV 或类似元素的 innerHTML 插入,然后使用 DOM 方法修改内容。

然后,您可以将 DIV 的内容作为节点插入到文档中,或者获取 innerHTML 并将其插入。

例如

function removeElementsFromMarkup(markup, selector) {
  var el = document.createElement('div');
  el.innerHTML = markup;
  var nodes = el.querySelectorAll(selector);

  for (var i=0, iLen=nodes.length; i<iLen; i++) {
    node = nodes[i]
    if (node.parentNode) {
      node.parentNode.removeChild(node);
    }
  }
  return el.innerHTML;
}


alert( removeElementsFromMarkup(
  '<div>foo<div class="remove-me">bar</div></div>', '.remove-me') // <div>foo</div>
);

以上使用 querySelectorAll,但您应该使用适合的任何选择方法。如果可以完成这项工作,请选择最低公分母(例如 getElementsByTagName)。

如果您展示一个真实示例来说明您正在尝试做什么,您将获得更具体(并且可能更有用)的答案。

于 2012-11-11T23:30:04.190 回答
1
var myContent = 'bla bla bla <div class="remove-me">variable content here</div> something something';
myContent = myContent.replace(/<div[\s\w"\=-]*class="remove-me"[\s\w"\=-]*>[\s\w]*<\/div>/g, "");
alert(myContent);

https://jsfiddle.net/umL1tswn/

于 2012-11-11T23:03:19.310 回答