JQuery element.closest (...). attr is not a function when using each

When repeating some DOM elements, I was unable to use .data or .attr on them:

$('.running').each (index, element) =>
    console.log element.closest('[data-id]')

gets me

<section class="job-block" data-id="240"></section>
...

but

$('.running').each (index, element) =>
    console.log element.closest('[data-id]').data('id')

throws

Uncaught TypeError: element.closest (...). data is not a function

+4
source share
4 answers

The method closest()you use is a native JS method and that returns a DOM element object, since it elementrefers to a DOM element object.


There are several options for obtaining the attribute value: either get the datasetproperty:
$('.running').each (index, element) =>
    console.log element.closest('[data-id]').dataset.id


Or wrap the jQuery element and use the method data().
$('.running').each (index, element) =>
    console.log $(element.closest('[data-id]')).data('id')


element jQuery jQuery closest().
$('.running').each (index, element) =>
    console.log $(element).closest('[data-id]').data('id')
+3

DOM ( ), jquery, jquery DOM, jquery.

$(element).closest...
+2

element DOMElement, native closeest(), jQuery one. , data() .

, element jQuery:

$('.running').each (index, element) =>
    console.log $(element).closest('[data-id]').data('id')
+2

data() - jQuery, jQuery DOM, $(element):

console.log $(element).closest('[data-id]').data('id')

, .

+2

Source: https://habr.com/ru/post/1666233/


All Articles