首先,这是一个 X-browser dom-parser 函数:
var parseXML = (function(w,undefined)
{
'use strict';
var parser,ie = false;
switch (true)
{
case w.DOMParser !== undefined:
parser = new w.DOMParser();
break;
case new w.ActiveXObject("Microsoft.XMLDOM") !== undefined:
parser = new w.ActiveXObject("Microsoft.XMLDOM");
parser.async = false;
ie = true;
break;
default :
throw new Error('No parser found');
}
return function(xmlString)
{
if (ie === true)
{//return DOM
parser.loadXML(xmlString);
return parser;
}
return parser.parseFromString(xmlString,'text/xml');
};
})(this);
//usage:
var newDom = parseXML(yourString);
var allTags = newDom.getElementsByTagName('*');
for(var i=0;i<allTags.length;i++)
{
if (allTags[i].tagName.toLowerCase() === 'span')
{//if all you want to work with are the spans:
if (allTags[i].hasChildNodes())
{
//this span has nodes inside, don't apply regex:
continue;
}
allTags[i].innerHTML = allTags[i].innerHTML.replace(/[.,?!'"]+/g,'');
}
}
这应该可以帮助你。您仍然可以访问 DOM,因此每当您发现需要过滤/替换的字符串时,您可以使用allTags[i]
并替换内容来引用节点。
请注意,不建议循环遍历所有元素,但我真的不想为您完成所有工作;-)。您必须检查您正在处理的节点类型:
if (allTags[i].tagName.toLowerCase() === 'span')
{//do certain things
}
if (allTags[i].tagName.toLowerCase() === 'html')
{//skip
continue;
}
还有那种东西......
请注意,此代码未经测试,但它是我对上一个问题的回答的简化版本。解析器位应该可以正常工作,实际上这是我为另一个问题设置的小提琴,它还向您展示了您可能希望如何更改此代码以更好地满足您的需求