我使用此代码删除所有标签,但我不想保存一些标签,如
<img>
等...我该怎么办?
我不明白如何过滤标签
/***************************************************
STRIP HTML TAGS
****************************************************/
function strip_tags(html){
//PROCESS STRING
if(arguments.length < 3) {
html=html.replace(/<\/?(?!\!)[^>]*>/gi, '');
} else {
var allowed = arguments[1];
var specified = eval("["+arguments[2]+"]");
if(allowed){
var regex='</?(?!(' + specified.join('|') + '))\b[^>]*>';
html=html.replace(new RegExp(regex, 'gi'), '');
} else{
var regex='</?(' + specified.join('|') + ')\b[^>]*>';
html=html.replace(new RegExp(regex, 'gi'), '');
}
}
//CHANGE NAME TO CLEAN JUST BECAUSE
var clean_string = html;
//RETURN THE CLEAN STRING
return clean_string;
编辑** 这是我的 HTML 代码
<body class="portrait" onLoad="prepareImages()">
<div id="title_wrapper"><h2 id="title"><a href="[[[LINK]]]">[[[TITLE]]]</a></h2></div>
<h2 id="subtitle">[[[DATE]]]</h2>
<div id="content">
[[[FULL CONTENT]]] etc....
</div>
我以这种方式使用了你的函数(我必须替换的是:[[[完整内容]]]等......)
(strip_tags(contentElem,"<img>");
没有结果。我怎样才能用[[[完整内容]]]等重写[[[完整内容]]]等......除了
<img>
之外没有html标签?
这是带有允许标签的 strip_tags() (来自 phpjs.org )。
// allow can be a string like '<b><i>'
function strip_tags(str, allow) {
// making sure the allow arg is a string containing only tags in lowercase (<a><b><c>)
allow = (((allow || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi;
var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
return allow.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
}
评估?呃,那真是丑陋的代码。它使用正则表达式模式匹配所有标签。
"a", "b", "strong"
的字符串。由于丑陋的 evil
eval
结构,引号是必需的。true
),则第三个参数是允许的标签列表false
),则第三个参数是被拒绝的标签列表如果您需要合适的
strip_tags
函数,请查看 http://phpjs.org/functions/strip_tags:535
如果使用 DOM,这个操作会简单得多。我不知道为什么人们试图为此使用正则表达式。
/**
* Removes all tags with the provided tagName.
* @param {Element} el The root element.
* @param {string} tagName The tagName to match.
* @example
* >> document.body.innerHTML;
* "<p><img src="foo.jpg">Some <strong>text</strong></p>"
* >> stripTags(document.body, 'img');
* undefined
* >> document.body.innerHTML;
* "<p>Some <strong>text</strong></p>"
* >> stripTags(document.body, 'strong');
* undefined
* >> document.body.innerHTML;
* "<p>Some text</p>"
*/
function stripTags(el, tagName) {
var els = el.getElementsByTagName(tagName.toUpperCase());
for (var i = 0; i < els.length; i++) {
while (els[i].firstChild)
els[i].parentNode.insertBefore(els[i].removeChild(els[i].firstChild), els[i]);
els[i].parentNode.removeChild(els[i--]);
}
}
这将删除所有标签(而不是它们的内容),我认为这就是
strip_tags
的行为方式。