HTML和Javascript:从字符串中删除包含动态内容的完整标记

时间:2016-10-05 07:31:17

标签: javascript jquery html

我有一个能够获得HTML的字符串。在这个HTML中,我有一个文本框,里面有文字:

<div class="aLotOfHTMLStuff"></div>
<textbox>This textbox must be terminated! Forever!</textbox>
<div class="andEvenMoreHTMLStuff"></div>

现在我想从该字符串中删除文本框,包括里面的文本。期望的结果:

<div class="aLotOfHTMLStuff"></div>
<div class="andEvenMoreHTMLStuff"></div>

我怎样才能实现它?两个主要问题:它是一个字符串而不是DOM的一部分,文本框内的内容是动态的。

5 个答案:

答案 0 :(得分:1)

这是一个示例,它将在字符串中查找开始和结束标记,并替换它们之间的任何内容。

const template = document.querySelector('#html')
const str = template.innerHTML

function removeTagFromString(name, str) {
  const reg = new RegExp('<' + name + '.*>.*<\/'+ name +'.*>\\n*', 'gm')
  return str.replace(reg, '')
}
console.log('before', str)
console.log('after', removeTagFromString('textbox', str))
<template id="html">
<div class="aLotOfHTMLStuff"></div>
<textbox>This textbox must be terminated! Forever!</textbox>
<div class="andEvenMoreHTMLStuff"></div>
</template>

答案 1 :(得分:1)

如果是文本字符串而不是HTML,则可以将其转换为DOM:

var str = '<div class="aLotOfHTMLStuff"></div><textbox>This textbox must be terminated! Forever!</textbox><div class="andEvenMoreHTMLStuff"></div>';
var $dom = $('<div>' + str + '</div>');

然后从DOM中删除元素:

 $dom.find('textbox').remove();

如果需要,可以收回字符串:

console.log($dom.html());

答案 2 :(得分:0)

试试这个:

var string = '<div class="aLotOfHTMLStuff"></div><textbox>This textbox must be terminated! Forever!</textbox><div class="andEvenMoreHTMLStuff"></div>';
if ( string.includes("<textbox>") ) {
	var start = string.indexOf("<textbox>");
  var stop = string.indexOf("</textbox>");
  string = string.replace(string.slice(start, stop+10), "");
}
console.log(string);

答案 3 :(得分:0)

您可以使用parseHTML将字符串转换为html, 像..

var str = '<div class="aLotOfHTMLStuff"></div><textbox>This textbox must be terminated! Forever!</textbox><div class="andEvenMoreHTMLStuff"></div>';
var a = $.parseHTML(str);
var newstr = ""; 
a.forEach(function(obj) {
    if ($(obj).prop('tagName').toLowerCase() != "textbox") {
        newstr += $(obj).prop("outerHTML")
    }
});

这非常简单,您可以通过更换"textbox"

来删除任何标记

答案 4 :(得分:-1)

  

它是一个字符串,不是DOM的一部分,也不是内部的内容   文本框是动态的。

那么html是一个字符串类型的js变量?像这样?:

var string = '<div class="aLotOfHTMLStuff"></div><textbox>This textbox must be terminated! Forever!</textbox><div class="andEvenMoreHTMLStuff"></div>';

因此,在这种情况下,您可以像这样使用.replace();

string = string.replace('<textbox>This textbox must be terminated! Forever!</textbox>', '');