2017-02-12 6 views
3

В настоящее время я застрял в очень простой проблеме jQuery. Я думаю, что есть что-то, что я не понимаю о jquery's .each().jQuery .find() внутри .each() не работает

Так что это мой код:

 $('.test-list .test-item').each(() => { 
     console.log($(this).find('.test-paragraph').text()); //not working always empty 
    }); 

Я просто итерация кучу предметов, которые отлично работает. Но тогда я хочу получить текст абзаца the.test внутри моего элемента. Проблема заключается в том, что метод find() не работает. Также существует элемент html.

<div class="test-list"> 
    <div class="test-item"> 
     <p class="test-paragraph">Test 1</p> 
    </div> 
    <div class="test-item"> 
     <p class="test-paragraph">Test 2</p> 
    </div> 
    <div class="test-item"> 
     <p class="test-paragraph">Test 3</p> 
    </div> 
</div> 

Кто-нибудь знает, в чем проблема?

+0

@PranavCBalan omg omg конечно! THX очень! Мне нужно больше спать. – Orlandster

+0

'$ ('. Test-list .test-item .test-paragraph'). Text ((i, txt) => console.log (txt))' https://jsfiddle.net/53Lm73fu/ –

+0

Или просто используйте его параметр, который в большей степени соответствует стандартным API. '$ ('. test-list .test-item'). each ((i, el) => {console.log ($ (el) .find ('. test-paragraph'). text());}); https://jsfiddle.net/53Lm73fu/1/. Хотя это ближе к стандартным методам итерации, jQuery решил изменить параметры. Если вы использовали '.forEach' вместо этого,' el' будет первым параметром. –

ответ

2

Согласно MDN doc:

выражения функции

стрелки имеет более короткий синтаксис, чем выражение функции и не связывают свои собственное это, аргументы, супер, или new.target. Функции стрелок всегда анонимны. Эти выражения функций лучше всего подходят для функций не-метода, и они не могут использоваться в качестве конструкторов.

Внутри функции стрелки this не относится к элементу, поэтому вместо этого используйте обычную функцию.

$('.test-list .test-item').each(function() { 
    console.log($(this).find('.test-paragraph').text()); 
}); 

Или вы можете использовать text() метод с обратным вызовом для итерации и получить текстовое содержимое элемента.

$('.test-list .test-item .test-paragraph').text((i, text) => console.log(text)) 

Или вместо this использовать второй аргумент в функции, указанной стрелки, и в соответствии с docs, которые относятся к элементу.

$('.test-list .test-item').each((i, ele) => console.log($(ele).find('.test-paragraph').text())); 
Смежные вопросы