Допустим, я определяю элемент
$foo = $('#foo');
а потом я звоню
$foo.remove()
с какого-то события. У меня вопрос, как я могу проверить, был ли $ foo удален из DOM или нет? Я обнаружил, что это $foo.is(':hidden')
работает, но это, конечно, также вернет истину, если я просто позвоню $foo.hide()
.
$foo.closest(document.documentElement)
быстрее (если кого-то волнует jsperf.com/jquery-element-in-dom )$.contains(document.documentElement, $foo.get(0))
это самый быстрый способ.document.contains($foo[0])
Как насчет этого:
источник
Я только что понял ответ, когда набирал вопрос: Позвони
Если
$f00
был удален из DOM, то$foo.parent().length === 0
. В противном случае его длина будет не менее 1.[Редактировать: это не совсем правильно, потому что удаленный элемент все еще может иметь родителя; например, если вы удалите a
<ul>
, у каждого из его дочерних элементов<li>
все равно будет родитель. Вместо этого используйте ответ SLaks.источник
$foo
был удален из DOM. Если он был успешно удален, у него больше не будет родительского элемента. Следовательно,$foo.parent().length === 0
означает, что удаление было успешным.Поскольку я не могу ответить как комментарий (я думаю, слишком низкая карма), вот полный ответ. Самый быстрый способ - это просто развернуть проверку jQuery для поддержки браузера и сократить постоянные факторы до минимума.
Как видно также здесь - http://jsperf.com/jquery-element-in-dom/28 - код будет выглядеть так:
Это семантически эквивалентно jQuery.contains (document.documentElement, elt [0]).
источник
Вероятно, наиболее эффективный способ:
Это также работает с jQuery:
Источник из МДН
источник
Мне понравился этот подход. Нет JQuery и DOM поиска. Сначала найдите верхнего родителя (предка). Затем посмотрите, является ли это documentElement.
источник
вместо того, чтобы перебирать родителей, вы можете просто получить ограничивающий прямоугольник, который равен нулю, когда элемент отсоединен от dom
если вы хотите обработать крайний край нулевого элемента ширины и высоты с нуля сверху и с нуля слева, вы можете дважды проверить, перебирая родителей до document.body
источник
display: none
не имеет boundingRect либоСогласитесь с комментарием Перро. Это также можно сделать так:
источник
источник
Почему не просто
if( $('#foo').length === 0)...
:?источник
$foo
, и проверка соответствия повторного запроса какому-либо элементу, кажется жизнеспособным решением проблемы во многих сценариях. Это может быть даже быстрее, чем некоторые другие решения, из-за того, как jQuery и браузеры оптимизируют определенные селекторы (например, по идентификатору).источник