Я пытаюсь определить, является ли элемент потомком другого электората, который имеет определенный атрибут. Пока у меня нет проблем, когда значение истинно, но я получаю TypeError: undefined is not a function (evaluating 'node.hasAttribute(attribute)')
, когда hasAttribute false. Есть идеи?Неопределенная ошибка при попытке определить потомка родителя с использованием hasAttribute
document.body.addEventListener('touchmove', function(event) { stopScroll(event); });
var stopScroll = function(event) {
var target = event.target;
var parent = target.parentNode;
if (isDescendantOf.attribute('data-scroll', target)) {
} else {
event.preventDefault();
}
};
var isDescendantOf = {};
isDescendantOf.parent = function(parent, child) {
var node = child.parentNode;
while (typeof node !== 'undefined') {
if (node == parent) {
return true;
}
node = node.parentNode;
}
return false;
};
isDescendantOf.tag = function(tag, child) {
var node = child.parentNode;
while (typeof node !== 'undefined') {
if (node.tagName == tag) {
return true;
}
node = node.parentNode;
}
return false;
};
isDescendantOf.attribute = function(attribute, child) {
var node = child.parentNode;
while (node !== null) {
console.log(typeof node);
if (node.hasAttribute(attribute) === true) {
return true;
}
node = node.parentNode;
}
return false;
};
Вот скрипка, хотя она действует даже страннее по какой-то причине: http://jsfiddle.net/x95tgmkn/
Попробуйте использовать parentElement или проверьте тип узла для текста vs element – Mouser
@Mouser Я попытался сделать это с помощью 'typeof node === 'object'' в других функциях, попытался изменить его на' node! == null ", но все тот же вопрос. Есть ли другой способ проверить, является ли это элементом? –
После быстрого google, 'node instanceof HTMLElement', кажется, путь. Спасибо за толкание в правильном направлении! –