JQuery CSS для нескольких элементов? - PullRequest
0 голосов
/ 27 января 2010

Мне нужно применить этот скрипт, чтобы работать так же для двух других div: Это хорошо работает, но как я могу заставить его делать то же самое для двух других элементов, не переписывая все для каждого?

$(".survey_option li > a").each().live('click', function (event) {
    // First disable the normal link click
    event.preventDefault();

    // Remove all list and links active class.
    $('.so_1 .active').toggleClass("active");
    // Grab the link clicks ID
    var id = this.id;

    // The id will now be something like "link1"
    // Now we need to replace link with option (this is the ID's of the checkbox)
    var newselect = id.replace('partc', 'optionc');

    // Make newselect the option selected.
    $('#'+newselect).attr('checked', true);

    // Now add active state to the link and list item
    $(this).addClass("active").parent().addClass("active");

    return false;
});

Ответы [ 5 ]

4 голосов
/ 27 января 2010

Вы можете повлиять на несколько элементов, изменив ваш селектор:

$(".element_1, .element_2, .randomElement, #someOtherThing");

Обратите внимание, что вам не нужно звонить на $.each() перед добавлением вашего $.live() вызова. $.live() будет применяться ко всем подобранным элементам, используя собственную внутреннюю логику $.each().

$(".elem1, .elem2 > a, #someThing").live("click", function(e){
  e.preventDefault();
  alert($(this).text()); // works on all elements in the selector
});
2 голосов
/ 27 января 2010

Во-первых, вам не нужно вызывать метод .each(), .live() свяжет себя со всеми элементами, которым соответствует ваш селектор. Итак, все, что вам нужно сделать, это сопоставить все элементы, которые вы хотите, используя селекторы:

$(".survey_option li > a, #secondElement, #thirdElement > p").live('click', function (event) {
    // do it all...
}
2 голосов
/ 27 января 2010

Как насчет обёртывания вашей функции в другую функцию, например ...

function modMyDiv(selectorClass) {
    $("." + selectorClass + " li > a").each().live('click', function (event) {
        // First disable the normal link click
        event.preventDefault();

        // Remove all list and links active class.
        $('.so_1 .active').removeClass("active");
        $('.so_2 .active').removeClass("active");       
        // Grab the link clicks ID
        var id = this.id;

        // The id will now be something like "link1"
        // Now we need to replace link with option (this is the ID's of the checkbox)
        var newselect = id.replace('partc', 'optionc');

        // Make newselect the option selected.
        $('#'+newselect).attr('checked', true);

        // Now add active state to the link and list item
        $(this).addClass("active").parent().addClass("active");

        return false;
    });
}

Тогда

modMyDiv('survey_option');
modMyDiv('other_class');
1 голос
/ 27 января 2010

Возможно, вы захотите сделать ее функцией jQuery для простоты вызова ...

$.fn.myFunct = function() {
    $(this).each()...
}

Тогда звоните по любому, что вам нравится:

$("#this, .that, otherstuff").myFunct();
0 голосов
/ 27 января 2010

Вы также можете обернуть его как объект и распространить на другие селекторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...