2010-04-25 2 views
1

Или я должен сделать что-то вроде этого:Могу ли я использовать XPath для фильтрации элементов по свойствам CSS?

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 это свойство, а не атрибут ...

+0

Можете ли вы привести пример кода? Вы можете, конечно, искать внутри атрибута стиля. – Viet

+0

Viet: Не могли бы вы привести пример того, как это сделать в XPath? Например, http://www.zvon.org/xxl/XPathTutorial/Output/example4.html ничего не говорит о поиске в атрибуте style. – int3

+0

oops, эта ссылка должна была быть http://www.zvon.org/xxl/XPathTutorial/Output/ – int3

ответ

1

Как сказал 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" :)

+0

Я думаю, что метод Javascript более изящный по сравнению с этим. Тем не менее, спасибо, что ответили на вопрос! – int3

+0

Да, но это было то, о чем вы просили. Я использую только XPath, когда у меня нет JS-движка. – Viet

1
+0

Я считаю, что это выбирает атрибуты, а не свойства стиля. Кроме того, я бы предпочел собственное Javascript-решение, и Javascript не имеет встроенной поддержки селектора CSS. – int3

+0

Я неправильно понял ваш вопрос. Извини за это. Вы можете использовать вычисленный стиль. – knut

+0

oops. На самом деле мой первый фрагмент кода предназначался для использования getComputedStyle, но я оставил эту функцию. Да, кроме того, ваша ссылка функционально эквивалентна тому, что я изначально разместил ... Наверное, нет лучшего способа. – int3