-1

我正在尝试创建一个 javascript 函数,该函数接收假定为 HTML 的字符串并删除所有不可见的元素。我这里不是在页面上操作,只是来自任何地方的一串HTML。

起初,使用 :hidden 选择器似乎是理想的,但我无法让它工作。所以我开始玩filter(),但没有成功。

函数 StripInvisibleNodes(html) {
    var 容器 = "" + html+ "";
    //var $onlyvisiblehtml = $(container).find(":hidden").remove(); //没有工作
    var $onlyvisiblehtml = $(container).find('*').filter(function() { return this.style.display == "none"; }).remove();
    var 已移除 = $onlyvisiblehtml.html();
    退货已移除;
}

更新:以下是工作解决方案

函数 StripInvisibleNodes(html) {
    $('body').append("<div id='tempspace' style='visibility:hidden'>" + content + "</div>");
    var $toremove = $('#tempspace').find("*").filter(':hidden');
    $toremove.remove();
    var resultstring = $('#tempspace').html();
    $('#tempspace').remove();
    返回结果字符串;
}
4

2 回答 2

3

:visible如果没有在 DOM 中呈现,jQuery 不会考虑 HTML 。例如:

$test = $('<p>').filter(':visible');

将产生一个空的 jQuery 对象。

你可以做的是在 DOM 中简单地渲染它们,计算哪些元素是可见的,然后立即删除它们。您可以将它们放在一个元素中,visibility: hidden或者opacity: 0如果您不想冒险让它闪烁到视图中:

$('#testspace').append('<p>');
$test2 = $('#testspace').children().filter(':visible');
console.log($test2);
$('#testspace').remove();

HTML:

<div id="testspace" style="visibility:hidden"></div>

http://jsfiddle.net/4NxBd/2/

于 2012-09-25T18:10:37.637 回答
0

只选择可见元素怎么样?

$(":visible", container).html();
于 2012-09-25T18:01:52.773 回答