-1

HTMLであると想定される文字列を受け取り、表示されないすべての要素を削除するjavascript関数を作成しようとしています。私はここのページを操作しているのではなく、どこからでも 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');
    $tomove.remove();
    var resultstring = $('#tempspace').html();
    $('#tempspace').remove();
    結果文字列を返します。
}
4

2 に答える 2

3

:visibleHTML が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 に答える