У меня есть такой html:
<div id="1">
<p>
Volume = <input type="text" />
<button rel="3.93e-6" class="1" type="button">Check answer</button>
</p>
<div></div>
</div>
и некоторые JS вроде этого:
$("button").click(function () {
var buttonNo = $(this).attr('class');
var correct = Number($(this).attr('rel'));
validate (Number($("#"+buttonNo+" input").val()),correct);
$("#"+buttonNo+" div").html(feedback);
});
Я бы очень хотел, чтобы на кнопке не было class = "1" (я знаю, что числовые классы недействительны, но это WIP!), Чтобы я мог определить buttonNo на основе id родительского div. В реальной жизни есть несколько таких разделов.
Как мне найти идентификатор div, являющегося родительским элементом кнопки.
Каким будет более семантический способ сохранить ответ в коде кнопки. Я хочу сделать это максимально надежным, чтобы непрограммист мог копировать и вставлять, не ломая ничего!
1.
2.
Способов должно быть много! Можно было бы скрыть элемент, содержащий ответ, например
А затем используйте код jQuery, аналогичный приведенному выше, чтобы получить его:
имейте в виду, что если вы поместите ответ в клиентский код, они его увидят :) Лучший способ сделать это - проверить его на стороне сервера, но для приложения с ограниченными возможностями это может не быть проблемой.
источник
$(parent[0]).attr('id')
после того, как мне понравились несколько родительских селекторов.Попробуй это:
источник
источник
Чтобы получить идентификатор родительского div:
Кроме того, вы можете немного реорганизовать свой код:
Теперь нет необходимости в классе кнопок
объяснение
eq (0) означает, что вы выберете один элемент из объекта jQuery, в данном случае это элемент 0, то есть первый элемент. http://docs.jquery.com/Selectors/eq#index
$ (selector) .siblings (siblingsSelector) выберет всех братьев и сестер (элементы с одним родителем), которые соответствуют siblingsSelector http://docs.jquery.com/Traversing / siblings # expr
$ (selector) .parents (parentSelector) выберет все родительские элементы, соответствующие селектору, которые соответствуют родительскому селектору. http://docs.jquery.com/Traversing/parents#expr
Таким образом: $ (selector) .parents ('div: eq (0)'); будет соответствовать первому родительскому div элементов, соответствующих селектору.
Вам следует взглянуть на документацию jQuery, особенно на селекторы и обход:
источник
http://jsfiddle.net/qVGwh/6/ Проверьте это
источник
Это легко сделать, выполнив:
Вы прикрепляете это к любому объекту внутри таблицы, и он вернет вам идентификатор этой таблицы.
источник
В JQUery есть метод .parents () для перемещения вверх по дереву DOM, с которого вы можете начать.
Если вы заинтересованы в том, чтобы сделать это более семантическим способом, я не думаю, что использование атрибута REL на кнопке - лучший способ семантически определить «это ответ» в вашем коде. Я бы порекомендовал что-то в этом роде:
и
Не совсем уверен, как работают ваша проверка и отзывы, но идею вы поняли.
источник
find () и closest () кажется немного медленнее, чем:
источник
$(this).parent().parent().attr("id");
?