Нахождение идентификатора родительского отделения, использующего JQuery

function compare(propName) {
    return function(a,b) {
        if (a[propName] < b[propName])
            return -1;
        if (a[propName] > b[propName])
            return 1;
        return 0;
    };
}

objs.sort(compare("last_nom"));
99
задан Rich Bradshaw 13 February 2009 в 13:46
поделиться

5 ответов

Вы могли использовать делегация события на родительском отделении Или использовать самый близкий метод для нахождения родителя кнопки.

самый легкий из этих двух является, вероятно, самым близким.

var id = $("button").closest("div").prop("id");
211
ответ дан DMcCallum83 5 November 2019 в 12:01
поделиться

1.

$(this).parent().attr("id");

2.

должно быть большое количество путей! Можно было быть должен скрыть элемент, который содержит ответ, например,

<div>
    Volume = <input type="text" />
    <button type="button">Check answer</button>
    <span style="display: hidden">3.93e-6&lt;/span>
    <div></div>
</div>

, И затем имейте подобный код jQuery к вышеупомянутому для захвата этого:

$("button").click(function () 
{
    var correct = Number($(this).parent().children("span").text());
    validate ($(this).siblings("input").val(),correct);
    $(this).siblings("div").html(feedback);
});

принимают во внимание, что, если Вы помещаете ответ в клиентский код затем, они видят его :) Лучший способ сделать это должно проверить его серверная сторона, но для приложения с ограниченным объемом это не может быть проблемой.

48
ответ дан Robert Grant 5 November 2019 в 12:01
поделиться

Попробуйте это:

$("button").click(function () {
    $(this).parents("div:first").html(...);
});
11
ответ дан Buu Nguyen 5 November 2019 в 12:01
поделиться

Получить идентификатор родительского отделения:

$(buttonSelector).parents('div:eq(0)').attr('id');

кроме того, можно осуществить рефакторинг код вполне немного:

$('button').click( function() {
 var correct = Number($(this).attr('rel'));
 validate(Number($(this).siblings('input').val()), correct);
 $(this).parents('div:eq(0)').html(feedback);
});

Теперь нет никакой потребности в объяснении класса кнопки


eq (0), средства, что Вы выберете один элемент из объекта jQuery, в этом элементе случая 0, таким образом первый элемент. http://docs.jquery.com/Selectors/eq#index
$ (селектор) .siblings (siblingsSelector) выберет все одноуровневые элементы (элементы с тем же родителем), которые соответствуют $ siblingsSelector http://docs.jquery.com/Traversing/siblings#expr
(селектор) .parents (parentsSelector), выберет всех родителей элементов, подобранных селектором, которые соответствуют родительскому селектору. http://docs.jquery.com/Traversing/parents#expr
Таким образом: $ (селектор) .parents ('div:eq (0)'); будет соответствовать первому родительскому отделению элементов, подобранных селектором.

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

7
ответ дан Pim Jager 5 November 2019 в 12:01
поделиться

JQuery имеет .parents () метод для продвижения дерева DOM, которое можно запустить там.

, Если Вы интересуетесь выполнением этого более семантический путь, я не думаю с помощью атрибута РЭЛА на кнопке, лучший способ семантически определить, "это - ответ" в коде. Я рекомендовал бы что-то вдоль этих строк:

<p id="question1">
    <label for="input1">Volume =</label> 
    <input type="text" name="userInput1" id="userInput1" />
    <button type="button">Check answer</button>
    <input type="hidden" id="answer1" name="answer1" value="3.93e-6" />
</p>

и

$("button").click(function () {
    var correctAnswer = $(this).parent().siblings("input[type=hidden]").val();
    var userAnswer = $(this).parent().siblings("input[type=text]").val();
    validate(userAnswer, correctAnswer);
    $("#messages").html(feedback);
});

Не совсем уверенный, как Ваш проверять и обратная связь работают, но Вы получаете идею.

3
ответ дан Parrots 5 November 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: