array.some(this.hasAttribute("data-attr"))
Было почти правильно. Array#some
принимает предикат , поэтому вам нужно сделать
array.some(function(el) {
return el.hasAttribute("data-attr");
})
или короче, используя функции стрелок:
array.some(el => el.hasAttribute("data-attr"))
Array#every
работает так же и принимает предикат, поэтому вы можете назвать его так же:
array.every(function(el) {
return el.hasAttribute("data-attr");
})
//or
array.every(el => el.hasAttribute("data-attr"))
И если вы хотите использовать один или другой, вы можете извлечь предикат и используйте его снова:
var hasDataAttribute = el => el.hasAttribute("data-attr")
array.some(hasDataAttribute)
array.every(hasDataAttribute)
Если у вас есть jQuery объекты, вы должны использовать некоторые приемы , так как jQuery не имеет метода, который возвращает true
или false
для атрибутов существования. Вы можете легко смоделировать его с помощью obj.attr('some-attribute') !== undefined
- это вернет true
, если some-attribute
существует, и false
, если его нет.
var hasDataAttribute = jQueryEl => jQueryEl.attr('data-attr') !== undefined
Для атрибутов data-*
вы также можете использовать jQuery.data()
, что (в данном случае) сокращение element.attr('data-something')
такое же, как element.data('something')
:
var hasDataAttribute = jQueryEl => jQueryEl.data('attr') !== undefined