2015-05-08 2 views
0

Я хочу использовать Javascript и JQuery, чтобы сделать копию всего html всей веб-страницы и удалить все элементы, которые не видны пользователю. Это то, что я пробовал до сих пор:Как удалить невидимые элементы из всего документа?

$('html').not(':visible').remove() 

Однако, похоже, что это не сработало. Кто-нибудь знает, как я могу это сделать?

ответ

1

Прямо сейчас вы используете таргетинг только на элемент <html> с помощью вашего селектора. Вы должны перебрать все элементы и проверить их видимость, как это:

$('*').each(function(){ 
    if($(this).not(':visible')){ 
     $(this).remove(); 
    } 
}); 

Еще более кратким было бы просто предназначаться скрытые элементы и удалить их, как например:

$('*:hidden').remove(); 

JQuery API ссылки состояния что элементы считаются видимыми, если они занимают место в документе. Поэтому элементы, имеющие высоту и ширину больше 0, считаются видимыми. Это означает, что мы должны вместо этого взглянуть на вычисленный CSS, если у вас возникли проблемы с указанным выше кодом, удалив видимые вещи.

$('*').each(function(){ 
    if($(this).css('visibility') == 'hidden' || $(this).css('display') == 'none'){ 
     $(this).remove() 
    } 
}); 
+0

Это тоже слишком много удаляет. – karianneberg

+0

Элементы, которые имеют стиль 'display: none;', отличаются от элементов, которые имеют видимость: hidden. Можете ли вы уточнить, на что вы нацеливаетесь? Оба пользователя не видны, но они нацелены по-разному с jQuery. –

+0

Мне нужно удалить все, что не видно пользователю, так что «display: none» и «visibility: hidden». Насколько я вышел из [JQuery docs on hidden] (https://api.jquery.com/hidden-selector/), он заботится только о первом случае. Но теперь проблема заключается в том, что она удаляет вещи, которые не являются «скрытыми», а «display: none» – karianneberg

0

Вы удаляете элементы html, которые не видны. вы должны удалить своих детей.

попробовать этот

$('html').children().not(':visible').remove() 

EDIT: , как Barmar сказал, что это удаляет только непосредственные дочерние HTML. используйте другие ответы, чтобы удалить все элементы.

+2

Это не так. '.children()' только находит непосредственных детей, а не всех их потомков. – Barmar

+0

@ Бармар да, вы правы. так кто же проголосовал за мой ответ? – KooKoo

0

Это следует сделать это:

$("body :hidden").remove(); 
+0

Это не таргетинг на элемент –

+0

Это, кажется, удаляет много вещей, которые на самом деле видны. – karianneberg

+0

Да, он считает все в '' невидимым, потому что он не отображается. Необходимо ограничить его телом. – Barmar

Смежные вопросы