Получить тег таблицы из xpath - PullRequest
0 голосов
/ 04 октября 2018

Я создаю xpath для элементов, используя следующие функции:

    function getXPath(e) {
        if ("" !== e.id)
            return 'id("' + e.id + '")';
        if (e === document.body)
            return "//" + e.tagName;
        for (var t = 0, a = e.parentNode.childNodes, n = 0; n < a.length; n++) {
            var r = a[n];
            if (r === e)
                return getXPath(e.parentNode) + "/" + e.tagName + "[" + (t + 1) + "]"; 1 === r.nodeType && r.tagName === e.tagName && t++;
        }
    }

function getElementAttributes(t) {
    if (t) {
        var r = { tagName: t.tagName, cssSelector: getCssSelector(t), Xpath: getXPath(t) }, a = 0;
        for (a = 0; a < t.attributes.length; a++)
            r[t.attributes[a].nodeName] = t.attributes[a].nodeValue;
        return r
    }
    return {}
}

Затем я могу получить xpath для веб-элемента курсора (текущая позиция курсора):

chrome.extension.onMessage.addListener(
    function EventGetHtmlInfo(message, sender, sendResponse) {
        // Remove this function from the list of listeners.
        chrome.extension.onMessage.removeListener(EventGetHtmlInfo);

        // Result type.
        var elem = document.elementFromPoint(message.x / window.devicePixelRatio, message.y / window.devicePixelRatio);
        console.log(elem);
        sendResponse({
            title: document.title,
            uri: window.location.href,          
            attributes: getElementAttributes(elem)

        });
    });

После запуска этихфункции выше, он вернет xpath элемента html (в текущей позиции курсора).Например, я получаю HTML-скрипт, как показано ниже:

<div id="abc">
    <div>
          a
    </div>
    <div>
          b
    </div>
</div>

Я помещаю курсор на символ "b" в браузере, после запуска этих функций он вернет значение: "id (// abc //) / DIV[2] "

Теперь у меня есть таблица, похожая на эту:

<table>
        <tr>
            <td>b</td>
            <td>a</td>
            <td>a</td>
        </tr>
        <tr>
            <td>a</td>
            <td>a</td>
            <td>a</td>
        </tr>
    </table>

Человек x хочет взять все данные в таблице, поместив свой курсор в любую ячейку таблицы.Как я могу получить его xpath (не содержащий "TABLE [1] / TBODY [1] / TR [...] / TD [...]", только "TABLE [1]") "путем повторного использования" этих функций выше?если невозможно, как я могу получить его xpath другими способами?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...