JQuery:如何过滤出html字符串的“a”元素?

时间:2011-09-24 07:23:29

标签: jquery

所以,我有一个看起来像这样的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测试了上面的内容

5 个答案:

答案 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);

演示 - http://jsfiddle.net/XBjNS/

答案 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);

Live Demo

答案 4 :(得分:-1)

试试这个

$(myHtmlString).find('a').remove();
$(myHtmlString).appendTo('body');