Могу ли я использовать XPath для фильтрации элементов по свойствам CSS? - PullRequest
1 голос
/ 25 апреля 2010

Или я должен сделать что-то вроде этого:

var nodes = document.childNodes;
for (var i in nodes) {
    if (window.getComputedStyle(nodes[i], null).getPropertyValue('someproperty') == 'somevalue')
        // do stuff
}

Edit:

Я не очень знаком с XPath. «Простой» удар по проблеме будет выглядеть примерно так:

function test() {
    var resultSet = document.evaluate("//*[@float='left']", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0; i < resultSet.snapshotLength; i++) {
        var element = resultSet.snapshotItem(i);
        alert(element);
    }
}

Но неудивительно, что это не работает, поскольку float - это свойство, а не атрибут ...

Ответы [ 2 ]

1 голос
/ 25 апреля 2010

Как сказал ранее Viet & knut, вы можете продолжить работу с селекторами атрибутов и функциями сопоставления строк: https://www.w3schools.com/xml/xsl_functions.asp#string.

Вы не должны путать XPath с Javascript:)

У меня есть подсказка для вас. Скажем, у вас есть узел:

<a href="http://google.com" style="padding: 10px; float: left; margin: 10px auto;">Look at me!</a>

Используйте fn:substring-after("padding: 10px; float: left;", "float:"), чтобы получить " left; margin: 10px auto;".

А затем используйте fn:substring-before(" left; margin: 10px auto;", ";"), чтобы получить " left".

После этого используйте fn:normalize-space(" left"), чтобы получить "left":)

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