2014-12-23 2 views
0

Я пытаюсь найти все элементы с определенным атрибутом. Для каждого элемента я хочу сделать что-то зависимое от значения атрибута.Для каждого элемента с определенным атрибутом - Javascript

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

HTML:

<div id="t">Test</div> 
<div data-test="One">Value One</div> 
<div data-test="Two">Value Two</div> 

JS:

$("[data-test]").each(function(){ 
    $("#t").append(this.attr("data-test")); 
}); 

JsFiddle ссылка: http://jsfiddle.net/fbue5dpc/

Спасибо!

ответ

4

this в вашем each блоке относится к элементу DOM, который не имеет attr способ. Вы должны использовать $(this), чтобы преобразовать его в объект jQuery. Кроме того, можно улучшить это далее с помощью метода data для извлечения значений и кэширования #t элемент, чтобы уменьшить количество DOM извлечений делается:

var $t = $('#t') 
$("[data-test]").each(function(){ 
    $t.append($(this).data('test')); 
}); 

Updated fiddle

+0

Спасибо за улучшение. – DescampsAu

+0

Без проблем, рад помочь –

1

Try,

$(this).attr("data-test") 

Объяснение: внутри цикла Еогеаспа вы получите Dóm элемента, так как вы итерацию списка йота элемента. Таким образом, вы не можете вызвать метод JQuery непосредственно из йот elemet сделать это, вы должны преобразовать его в объект JQuery сделать это просто использовать $ (это)

+1

'Try ...' ответы не велики. Поскольку вы не объясняете, что вы делаете и почему это необходимо. –

+1

Спасибо, я добавил несколько пояснений –

+0

Спасибо за объяснение. Он работает так, как ожидалось. – DescampsAu

2
var elemnt = $("[data-test]"),frag = ""; 

elemnt.each(function() { 
    frag += $(this).attr("data-test"); 
}); 
$("#t").append(frag); 

Working DEMO

+1

Вы либо не должны менять «селектор», либо вы должны объяснить, почему вы изменили '[data-test]' на 'div [data-test]'. –

+3

t.niese y dont u дать ответ, а не комментировать и судить о других ответах .. это будет сделано OP ... –

+0

Для div я понимаю логику. Однако в моем приложении атрибут data-test может быть на разных элементах (h1, p, ...) – DescampsAu

0
$("div[id!='t']").each(function(){ 
    $("#t").append($(this).data('data-test')); 
} 
+0

'$ (" div [id != 't'] ")' ...? –

+0

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

+0

, поскольку он хочет добавить только свойство 'data-test'. Таким образом, каждый цикл выберет только следующее погружение, которое не имеет 'id = 't'' cz, он добавляет значение атрибута в' $ ("t") 'innnerHTML. –

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