2011-06-23 31 views
50

Mam selektor xpath. Jak mogę uzyskać elementy pasujące do tego selektora za pomocą jQuery?jquery wybierz element xpath

Widziałem, , ale nie korzysta z jQuery, i wydaje się nieco zbyt szczegółowe, i przypuszczam, że nie jest to w wielu przeglądarkach.

Wygląda na to, że ten http://jsfiddle.net/CJRmk/ nie działa.

alert($("//a").length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script> 
 
<a href="a1.php"></a> 
 
<a href="a2.php"></a>

Odpowiedz

17

document.evaluate() (DOM Level 3 XPath) jest obsługiwane w Firefox, Chrome, Safari i Opera - jedynym dużym przeglądarka brakuje MSIE. Niemniej jednak, jQuery obsługuje podstawowe wyrażenia XPath: http://docs.jquery.com/DOM/Traversing/Selectors#XPath_Selectors (przeniesione do wtyczki w bieżącej wersji jQuery, patrz https://plugins.jquery.com/xpath/). Po prostu konwertuje wyrażenia XPath na równoważne selektory CSS.

+0

To stara wersja jQuery API dla selektorów – Karolis

+0

@Karolis: masz rację, wygląda ta funkcjonalność została przeniesiona do wtyczki. Poprawiłem moją odpowiedź, aby dodać te informacje. –

+1

Wtyczka jQuery XPath znajduje się teraz na stronie https://plugins.jquery.com/xpath/ – egor83

18

Najpierw utwórz funkcję selektora xpath.

function _x(STR_XPATH) { 
    var xresult = document.evaluate(STR_XPATH, document, null, XPathResult.ANY_TYPE, null); 
    var xnodes = []; 
    var xres; 
    while (xres = xresult.iterateNext()) { 
     xnodes.push(xres); 
    } 

    return xnodes; 
} 

Aby użyć selektora xpath z jQuery, można zrobić tak:

$(_x('/html/.//div[@id="text"]')).attr('id', 'modified-text'); 

nadzieję, że może pomóc.

+0

Myślę, że to przyzwyczajenie działa, jeśli dokument używa przestrzeni nazw oraz w IE10-11 (XPath nie jest obsługiwany). –

+0

Dzięki, użyłem twojej funkcji _x() w kodzie Beat/Mink, aby naprawić wyniki ("xpath", "xpath expression") w niektórych sytuacjach. – myselfhimself

113

Jeśli debugowania lub podobny - W narzędzi chrom deweloperskich, można po prostu użyć

$x('/html/.//div[@id="text"]') 
+1

Działa to również w Safari. Wiele rzeczy należy do WebKit. Dzięki! – GregT

+7

@GregT ... i Firefox –

+0

@AloisMahdal, wygląda na to, że jest to Firebug (nie jest w 100% pewne, że nie jest również częścią Firefoksa). [Dokumentacja na stronie Firebug's] (https://getfirebug.com/wiki/index.php/$x). To także skrót do 'document.evaluate()', o którym wspomniał @WladimirPalant. – Kat

Powiązane problemy