Как работает функция 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 и, очевидно, может быть изменен в более поздних версиях.