в чем разница между .id и .attr ('id') в jquery - PullRequest
2 голосов
/ 04 декабря 2011
var x = $(this).parent().parent().parent().parent();

x.id дает мне undefined, а x.attr('id') возвращает правильный идентификатор.

Может кто-нибудь сказать мне разницу между этими двумя.Кстати, есть ли лучший способ получить $(this).parent().parent().parent().parent(), я не хочу назначать им идентификаторы, так как это усложнит работу с этими элементами.

Спасибо

Ответы [ 3 ]

11 голосов
/ 04 декабря 2011

x.id работает, когда x является элементом DOM, а не когда x является объектом jQuery.

Если x является объектом jQuery, вы можете сделать:

x[0].id

чтобы получить первый элемент DOM из объекта jQuery или вы можете использовать:

x.attr('id')

для использования метода jQuery для получения атрибута.

Что касается вашего другого вопроса, лучший способ заменить это:

$(this).parent().parent().parent().parent()

- поместить класс в нужного родителя и использовать это:

$(this).closest(".target")

Метод .closest(selector) найдет ближайшего родителя, соответствующего селектору. Использование класса для решения этой проблемы облегчает проектирование, поскольку вам не нужно использовать уникальные идентификаторы.

3 голосов
/ 04 декабря 2011

.id - это свойство элемента dom, тогда как ваш код выбирает объект jquery.Смотрите этот пример.Да, и обратите внимание, что если вы находитесь в jQuery 1.7+, вы, вероятно, хотите использовать prop, а не attr

$('#foo').prop('id'); //foo
$('#foo').id;         //undefined
$('#foo').get(0).id;  //foo

Если возможно, я бы попытался определить классы для представления вашего четверного родительского элемента,Тогда вы можете сделать что-то вроде

$(this).parents('.class');

Обратите внимание на использование родителей с 's'

0 голосов
/ 04 декабря 2011
$(this).parent().parent().parent().parent()

можно записать как:

$(this).parents().eq(3)

или:

$(this).parents(':eq(3)')
...