ChatGPT解决这个技术问题 Extra ChatGPT

jQuery 通过 XPath 选择元素

我有一个 XPath 选择器。如何使用 jQuery 获取与该选择器匹配的元素?

我见过 https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript 但它没有使用 jQuery,而且看起来有点过于冗长,而且我想它不是跨浏览器。

此外,此 http://jsfiddle.net/CJRmk/ 似乎不起作用。

警报($("//a").length);


J
Jeppe Liisberg

如果您正在调试或类似 - 在 chrome 开发人员工具中,您可以简单地使用

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

@GregT ...和火狐
@AloisMahdal,它看起来像是一个 Firebug 的东西(不是 100% 确定它不是 Firefox 的一部分)。 Documentation on Firebug's site。它也是 @WladimirPalant 提到的 document.evaluate() 的简写。
Firefox 开发者工具 implement it as well。果然,它是围绕 document.evaluate() 的一个非常简单的便捷包装器。 More info on the helper commands
而对于它上面的选择和使用函数,这不起作用:$x('/html/.//div[@id="text"]').hide(); 必须改用这个:$($x('/html/.//div[@id="text"]')).hide();
请注意,$x() 不是 jQuery。它正在返回 HTML DOM。 .hide() 是一个 jQuery 函数,因此您需要将 HTML DOM 包装在 $() 中才能访问 jQuery 函数,就像您使用任何其他原生 JS DOM 函数一样。
W
Wladimir Palant

document.evaluate()(DOM Level 3 XPath)在 Firefox、Chrome、Safari 和 Opera 中受支持 - 唯一缺少的主要浏览器是 MSIE。不过,jQuery 支持基本的 XPath 表达式:http://docs.jquery.com/DOM/Traversing/Selectors#XPath_Selectors(在当前 jQuery 版本中移至插件中,请参阅 https://plugins.jquery.com/xpath/)。然而,它只是将 XPath 表达式转换为等效的 CSS 选择器。


这是用于选择器的旧版本的 jQuery API
@Karolis:你是对的,看起来这个功能已经被移动到一个插件中。我编辑了答案以添加此信息。
N
Nanang El Sutra

首先创建一个 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;
}

要将 xpath 选择器与 jquery 一起使用,您可以这样做:

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

希望这能有所帮助。


我认为如果文档使用命名空间并且在 IE10-11 中(不支持 XPath),这将不起作用。
谢谢,我在 Behat/Mink 代码中使用了你的 _x() 函数来修复 find('xpath', 'xpath expression') 在某些情况下的不充分结果。