所以,我有一个看起来像这样的HTML字符串:
<div>
<div class="venue-tooltip">
Filling station
<div>
<a class="manage-venue-details" rel="venue-id-10" href="javascript:void(0);">Add filling station info</a>
</div>
</div>
</div>
我想获得没有“a”元素的所有内容,所以基本上有这样的东西:
<div>
<div class="venue-tooltip">
Filling station
<div>
</div>
</div>
</div>
HTML加载在js字符串中,我尝试了这些变体:
$(':not(a)', myHtmlString);
$(myHtmlString).not('a');
他们都返回未经过滤的HTML。有什么想法吗?
我的jQuery版本是1.6.1,我用Firefox 6测试了上面的内容
答案 0 :(得分:2)
您不能使用DOM操作函数来更改字符串。尝试使用常规表达式:
code.replace(/<a( |>).*?<\/a>/gi,"");
它比在DOM中转换字符串更有效,操作然后再次在字符串中再次转换它。
答案 1 :(得分:2)
两个not
过滤器只会在第一层搜索,而不是在树下搜索,它们会过滤集合,不会递归处理DOM树。
假设myHtmlString是一个jQuery对象(所以它是有效的 context )
$(':not(a)', myHtmlString);
将返回myHhtmlString
中包含的2个DOM节点的集合,因为它们都不是'a'元素
$(myHtmlString).not('a');
也将返回一个集合,但是使用原始HTML,因为它是唯一提供的元素,而不是'a'元素。两个版本之间的区别在于第一行代码中提供的 context ,因此它过滤了myHtmlString的子元素。如果您将div.venue-tooltip
更改为a.venue-tooltip
,则会在第一个版本中看到它已被过滤。
答案 2 :(得分:1)
这会有效,虽然它很长,我怀疑它的效率 -
var h = '<div><div class="venue-tooltip">Filling station<div><a class="manage-venue-details" rel="venue-id-10" href="javascript:void(0);">Add filling station info</a></div></div></div>';
$(h).find("a").each(function () {
//need to get full outer html for replace to work
h = h.replace($(this).clone().wrap('<div></div>').parent().html(),'')
})
alert(h);
答案 3 :(得分:0)
(function($) {
$.strRemove = function(theTarget, theString) {
return $("<div/>").append(
$(theTarget, theString).remove().end()
).html();
};
})(jQuery);
var htmlToBeChanged=$("#123").html();
var changedHtml= $.strRemove("a",htmlToBeChanged)
console.log(changedHtml);
答案 4 :(得分:-1)
试试这个
$(myHtmlString).find('a').remove();
$(myHtmlString).appendTo('body');