我有一个包含以下内容的字符串:
<span>A</span>BC<span id="blabla">D</span>EF
我希望能够将regx表达式的JavaScript替换功能用于仅删除没有id的跨度。所以结果看起来像
ABC<span id="blabla">D</span>EF
我对使用jQuery真的不感兴趣。我宁愿使用纯JavaScript来解决问题。我有以下但似乎没有正常工作
myText.replace(/(<([^>]+)>)/ig,"");
任何帮助将不胜感激!
答案 0 :(得分:3)
使用DOM,而不是正则表达式。
var input = '<span>A</span>BC<span id="blabla">D</span>EF',
output,
tempElt = document.createElement('span');
tempElt.innerHTML = input;
// http://www.quirksmode.org/dom/w3c_html.html#t03
if (tempElt.innerText) output = tempElt.innerText;
else output = tempElt.textContent;
console.log(output); // "ABCDEF"
演示:http://jsfiddle.net/mattball/Ctrkf/
<子> "It is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail." 子>
答案 1 :(得分:1)
像这样的东西可以完成这项工作,但它不使用正则表达式(但它也不使用jQuery,因此两个中的一个也不错)。
var s = '<span>A</span>BC<span id="blabla">D</span>EF';
function removeSpans(s) {
var a = document.createElement('div');
var b = a.cloneNode(true);
a.innerHTML = s;
var node;
while (a.firstChild) {
node = a.removeChild(a.firstChild);
if (node.tagName &&
node.tagName.toLowerCase() == 'span' &&
node.id == '') {
b.appendChild(document.createTextNode(getText(node)));
} else {
b.appendChild(node);
}
}
return b.innerHTML;
}
alert(removeSpans(s));
它不是特别健壮(实际上它比我想象的要好),并且在与测试用例略有不同的情况下可能会失败。但它显示了战略。
这是另一个版本,但非常相似:
function removeSpans2(s) {
var a = document.createElement('div');
a.innerHTML = s;
var node, next = a.firstChild;
while (node = next) {
next = next.nextSibling
if (node.tagName && node.tagName.toLowerCase() == 'span' && !node.id) {
a.replaceChild(document.createTextNode(node.textContent || node.innerText), node);
}
}
return a.innerHTML;
}