Как работает функция show/hide jquery?
у меня есть немного проблемы с функцией видимости переключения, которая работает на hidden
атрибут элемента. Проблема в том, что это не совместимо с браузером..
function hide(e) {$(e).hidden=true;}
function show(e) {$(e).hidden=false;}
Googling эта проблема я наткнулся на метод переключения стиля.отображать свойство, например..
function toggle(e) {
document.getElementById(e).style.display = (document.getElementById(e).style.display == "none") ? "block" : "none";
}
..но это кажется неоптимальным, потому что вы не можете иметь общую функцию show/hide, которая устанавливает свойство display в block
. Что если элемент в вопрос иногда предполагалось иметь inline
или что-то?
как, например, jQuery решает эту проблему?
1 ответов
он хранит старые display
значение под названием olddisplay
а затем использует значение этого, чтобы восстановить его при повторном отображении элемента. увидеть тут. Вы можете проверить реализацию любого метода jQuery на этом сайте.
в следующих фрагментах кода я аннотировал важную строку с помощью //LOOK HERE
комментарий.
важная часть show
способ:
for (i = 0; i < j; i++) {
elem = this[i];
if (elem.style) {
display = elem.style.display;
if (display === "" || display === "none") {
elem.style.display = jQuery._data(elem, "olddisplay") || ""; //LOOK HERE
}
}
}
, когда прячется элемент он сначала сохраняет текущий display
значение :
for (var i = 0, j = this.length; i < j; i++) {
if (this[i].style) {
var display = jQuery.css(this[i], "display");
if (display !== "none" && !jQuery._data(this[i], "olddisplay")) {
jQuery._data(this[i], "olddisplay", display); //LOOK HERE
}
}
}
а затем просто устанавливает display
свойство none
. Важная часть:
for (i = 0; i < j; i++) {
if (this[i].style) {
this[i].style.display = "none"; //LOOK HERE
}
}
Примечание
приведенный выше код взят из jQuery версии 1.6.2 и, очевидно, может быть изменен в более поздних версиях.