У меня есть эта функция, которая возвращает мне путь к el
. Однако иногда эта функция добавляет элемент, который не существует на странице. В этом случае:Сценарий возвращает элемент, который не существует на странице
<table>
<tr><td></td><tr>
</table>
путь к тд будет выглядеть table > tbody > tr > td
. В чем проблема с этой функцией?
function getDomPath(el) {
element = el;
if (!(el instanceof Element)) return;
var path = [];
while (el.nodeType === Node.ELEMENT_NODE && el.id != "jobs") {
var selector = el.nodeName.toLowerCase();
if (el.id) {
selector += '#' + el.id;
}
else if(el.className){
console.log(el.className);
selector += '.' + el.className;
}
else {
var sib = el, nth = 1, count = 1;
while (sib.nodeType === Node.ELEMENT_NODE && (sib = sib.previousSibling) && nth++){
console.log(Node.ELEMENT_NODE)
console.log(el.previousSibling);
console.log(el);
count += $(el).prevAll().size();
};
selector += ":nth-child("+count+")";
}
path.unshift(selector);
el = el.parentNode;
}
return path.join(" > ");
};
Я думаю, вы должны прочитать о дополнительных HTML-тегах и о том, как прощающие парсеры добавляют их в DOM. – Sirko
Ум, чтобы указать мне на какую-то конкретную статью? – Avdept
См. Http://www.w3.org/TR/REC-html40/struct/tables.html#h-11.2.1 - синтаксис '(CAPTION ?, (COL * | COLGROUP *), THEAD ?, TFOOT ?, TBODY +) 'означает, что единственными действительными дочерними элементами элемента' TABLE' являются 'CAPTION',' COL', 'COLGROUP',' THEAD', 'TFOOT' и' TBODY'. Кроме того, «+» после «TBODY» означает, что этот элемент ** необходим **. Если вы помещаете элементы 'TR' непосредственно в' TABLE', ваша разметка недействительна. –