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

シナリオがこのようなものである場合、単純に標準の 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 に答える