Почему TR виден, когда не в DOM? - PullRequest
0 голосов
/ 06 июля 2011

Почему элемент tr, который не был добавлен в DOM, считается видимым в jQuery, а div нет?

$('<tr></tr>').is(':visible')     // returns true
$('<div></div>').is(':visible')   // returns false

Я использую jQuery 1.4.2.Я протестировал это в Firefox 5, IE 9, Chrome 12, Safari 5 и Opera 11.5.

Разрешение

Я написал обходной путь для использования в моемдо тех пор, пока я не смогу перейти на более новую версию jQuery:

$('<tr></tr>').is('body *:visible')     // returns false
$('<div></div>').is('body *:visible')   // returns false

Спасибо всем за помощь!

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

visible не означает, что вы можете видеть это физически. Это все еще будет правдой, даже когда ваши глаза закрыты, например.

Сам узел не имеет понятия, что браузер отображает только одно дерево DOM.

У него нет установленных атрибутов, в результате чего браузер HTML будет рассматривать его как "невидимый", поэтому он "видимый" ... даже если он не является частью дерева одного узла, которое браузер фактически отображает.

Вы также можете спросить, как $('<b>Bold text</b>') может быть выделен жирным шрифтом или иметь любое графическое форматирование, когда его нельзя увидеть.

С документация :

Элементы могут считаться скрытыми для несколько причин:

  • У них есть значение CSS для отображения none.
  • Это элементы формы с type = "hidden".
  • Их ширина и высота явно установлены на 0.
  • Элемент-предок скрыт, поэтому элемент не отображается на странице.

Очевидно, что ничего из этого здесь не верно.

Я не могу объяснить, почему Данхамззз может дать другой результат! Это может быть как-то связано с iframe, в котором работает скрипка.


Обновление

ОК, jsfiddle.net не имеет к этому никакого отношения .

Однако I может воспроизвести это с помощью 1.4.2 .

Так что один или оба из них не правы. Учитывая противоречивое поведение tr против div, я бы предположил, что 1.4.2 неверен (в 1.4.4 было ряд изменений, связанных со скрытыми предметами) и что документация вводит в заблуждение.

0 голосов
/ 06 июля 2011

Сделай скрипку, оба ложны для меня. Что и следовало ожидать, поскольку они еще не были помещены в DOM и поэтому к ним не применяются стили / видимость.

...