2015-06-29 6 views
0

У меня есть следующий кодполучить атрибуты родителей event.target в

<html> 
    <head> 
     <script src="jquery-1.11.3.min.js"></script> 
    </head> 
    <body> 
     <form class="form" id="form1"> 
      First name:<br> 
      <input type="text" name="firstname"> 
      <br> 
      Last name:<br> 
      <input type="text" name="lastname"> 
     </form> 
    </body> 
</html> 

Я хочу, чтобы иметь возможность получить список атрибутов родителя щелкнутого элемента. Например, если я нажимаю на тег ввода, следует возвращать «класс» и «id», поскольку они являются атрибутами тега «форма».

До сих пор мне удалось получить атрибуты элемента, щелкнул с помощью:

$(event.target.attributes) 

Однако ничто не возвращается, когда я пытаюсь сделать то же самое для родительского элемента. Что-то не так в моем коде, пожалуйста?

$($(event.target).parents().eq(0).attributes) 
+0

Если вы хотите получить родитель, вы можете использовать $ ($ (event.target) .parent()) – nikhil

+1

сложения и на самом деле то, что вы делаете, в некотором роде правильное (хотя и не идеальный способ сделать это), просто избавиться от дополнительных $(). Он должен быть - $ (event.target) .parents(). Eq (0) .attributes – nikhil

ответ

2

Я решил проблему с помощью

$(event.target).parents().eq(0).each(function() { 
    $.each(this.attributes, function() { 
     if(this.specified) { 
      alert(this.name, this.value); 
     } 
    }); 
}); 
0

Если вы на самом деле в обработчик событий, поэтому не относится непосредственно к элементу с помощью this ??

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

Это применимо для непосредственных родителей, однако, если вы пытаетесь адрес кого-то в ближайшей родитель, вы можете использовать $(this).parents:,

$(this).parents("form").attr("class"); 

Edit: Так как вы пытаетесь принести список атрибутов и посмотреть, если конкретный атрибут существует, то вы можете использовать

$(this).parents("form")[0].attributes 

Это вернет вам NamedNodeMap ..

+0

Благодарим вас за ответ. Я отредактировал этот вопрос, поскольку считаю, что это неясно. В принципе, я не пытаюсь получить значение атрибута class (это произойдет позже). На этом этапе я хочу знать, что у родителя есть атрибут класса и атрибут id. –

+0

Проверьте обновленный ответ. –

+1

$ (this) .parents ("td") [0] здесь не имеет смысла :) – nikhil

1

Следующий код будет перебирать родительский т.е. элемент формы

$.each($(event.target).parent().attributes, function() { 
    // this.attributes is not a plain object, but an array 
    // of attribute nodes, which contain both the name and value 
    if(this.specified) { 
     console.log(this.name, this.value); 
    } 
    }); 

Кроме того, как это было предложено другими членами, вы должны использовать $ (это) вместо $ (event.target)

+0

Спасибо. Хотя ваш ответ на самом деле не работал для меня, он поставил меня в правильном направлении в моем расследовании. –

Смежные вопросы