Более чистое (вложенное) закрытие в JavaScript с помощью jQuery each () - PullRequest
6 голосов
/ 17 января 2009

Мне было интересно, есть ли более чистый (более краткий) способ сделать то, что каждый () делает в следующем коде JavaScript.

$(".moreinfodialog")
    .before('<a href="#">Click for more info.</a>')
    .each(function() {
        var temp = this;
        $(this).prev("a").click(function() {
            $(temp).dialog("open");
            return false;
        });
    })
    .dialog({ autoOpen: false, modal: true });

Обратите внимание, что последний вызов переупорядочивает элементы dom, поэтому классы ".moreinfodialog" больше не находятся рядом с hrefs.

Кстати: этот источник использует диалог jquery / jquery-ui, чтобы скрыть любой текст в div с классом ".moreinfodialog" и заменить его на "Click for more info". текст. При нажатии на этот текст отображается диалоговое окно с текстом внутри исходного элемента div.

1 Ответ

4 голосов
/ 17 января 2009

Редактировать: Этот ответ был актуален в более старых версиях jQuery. В более новой версии $.map работает по-другому.

Ознакомьтесь с функцией $. Map () , используемой для выполнения одной и той же операции с каждым элементом массива.

$('.moreinfodialog').map(function(idx, element) {
    $(this).prev("a").click(function() {
            $(element).dialog("open");
            return false;
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...