Получение селектора jQuery для элемента

В коде psuedo это - то, что я хочу.

var selector = $(this).cssSelectorAsString(); // Made up method...
// selector is now something like: "html>body>ul>li>img[3]"
var element = $(selector);

Причина состоит в том, что я должен выдать это к внешней среде, где строка является моим единственным способом обмениваться данными. Эта внешняя среда затем должна передать результат обратно, наряду с какой элемент обновить. Таким образом, я должен смочь сериализировать уникальный селектор CSS для каждого элемента на странице.

Я заметил, что jQuery имеет a selector метод, но это, кажется, не работает в этом контексте. Это только работает, если объект был создан с селектором. Это не работает, если объект был создан с объектом узла HTML.

45
задан BoltClock 13 March 2015 в 07:45
поделиться

2 ответа

Теперь я вижу, что плагин существовал (с тем же именем, о котором я тоже думал), но вот просто несколько быстрый JavaScript, который я написал. Необходимо не учитывать идентификаторы или классы элементов - только структура (и добавляет : eq (x) , где имя узла неоднозначно).

jQuery.fn.getPath = function () {
    if (this.length != 1) throw 'Requires one element.';

    var path, node = this;
    while (node.length) {
        var realNode = node[0], name = realNode.localName;
        if (!name) break;
        name = name.toLowerCase();

        var parent = node.parent();

        var siblings = parent.children(name);
        if (siblings.length > 1) { 
            name += ':eq(' + siblings.index(realNode) + ')';
        }

        path = name + (path ? '>' + path : '');
        node = parent;
    }

    return path;
};
54
ответ дан 26 November 2019 в 21:08
поделиться

Я тоже иногда виновен в этой практике, храним временных интервалов в объекте даты и используя GetTime (), как предложено Notnoop.

Это работает. Вопреки определенным мнению, это, безусловно, работает. Я просто игнорирую, что интервал может быть представлен непреднамеренной датой. Для меня быстрый и грязный способ добавить интервал, скажем, [6 лет, 6 месяцев, 6 дней, 6 часов, 6 минут, 6 секунд] до свидания.

-121--2364341-

jQuery-getPath - хорошая отправная точка: она даст вам предки товара, как это:

var path = $('#foo').getPath();
// e.g., "html > body > div#bar > ul#abc.def.ghi > li#foo"
8
ответ дан 26 November 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: