我可以使用XPath按CSS属性过滤元素吗?

时间:2010-04-25 10:28:30

标签: javascript css xpath

或者我必须做这样的事情:

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

修改

我对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 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

作为Viet&amp; knut之前说过,你可以继续使用属性选择器&amp;字符串匹配函数: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":)