То же решение, что и у @Blixt, но совместимое с несколькими элементами jQuery.
jQuery('.some-selector')
может привести к одному или нескольким элементам DOM. Решение @ Blixt работает, к сожалению, только с первым. Мое решение объединяет все их с ,
.
Если вы хотите просто обработать первый элемент, сделайте это так:
jQuery('.some-selector').first().getPath();
// or
jQuery('.some-selector:first').getPath();
Улучшенная версия
jQuery.fn.extend({
getPath: function() {
var pathes = [];
this.each(function(index, element) {
var path, $node = jQuery(element);
while ($node.length) {
var realNode = $node.get(0), name = realNode.localName;
if (!name) { break; }
name = name.toLowerCase();
var parent = $node.parent();
var sameTagSiblings = parent.children(name);
if (sameTagSiblings.length > 1)
{
allSiblings = parent.children();
var index = allSiblings.index(realNode) +1;
if (index > 0) {
name += ':nth-child(' + index + ')';
}
}
path = name + (path ? ' > ' + path : '');
$node = parent;
}
pathes.push(path);
});
return pathes.join(',');
}
});