Javascript 使用XPath选择包含特定文本的LI时遇到问题
以下是列表项的HTML:Javascript 使用XPath选择包含特定文本的LI时遇到问题,javascript,html,css,wordpress,xpath,Javascript,Html,Css,Wordpress,Xpath,以下是列表项的HTML: <li class="disabled-result" data-option-array-index="1" style="">4" (0)</li> 理想情况下,我会给我想要隐藏的列表项分配一个ID,但这是一个Wordpress网站,这使得它很难做到 我注意到,在页面源代码中,html没有显示(仅在inspector中显示)。我在页脚中运行了JS 非常感谢您的帮助。我一直在为这个挠头 (我也在没有var matchingElement行的情
<li class="disabled-result" data-option-array-index="1" style="">4" (0)</li>
理想情况下,我会给我想要隐藏的列表项分配一个ID,但这是一个Wordpress网站,这使得它很难做到
我注意到,在页面源代码中,
html没有显示(仅在inspector中显示)。我在页脚中运行了JS
非常感谢您的帮助。我一直在为这个挠头
(我也在没有var matchingElement
行的情况下尝试了这个方法。我还不太熟悉Xpath的使用,过去主要使用queryselector。)
编辑:以下是
<ul class="chosen-results">
<li class="active-result result-selected" data-option-array-index="0" style="">Size</li>
<li class="disabled-result" data-option-array-index="1" style="">4" (0)</li>
<li class="disabled-result" data-option-array-index="2" style="">5" (0)</li>
<li class="active-result" data-option-array-index="3" style="">Extra Large (5)</li>
<li class="active-result" data-option-array-index="4" style="">Large (7)</li>
<li class="active-result" data-option-array-index="5" style="">Medium (8)</li>
<li class="disabled-result" data-option-array-index="6" style="">Small (0)</li>
</ul>
- 大小
- 4”(0)
- 5”(0)
- 超大(5)
- 大(7)
- 中等(8)
- 小(0)
我不能100%肯定这会修复其余的代码,但是xpath前面需要有“//”字样。如果您尝试在firebug或chrome的dom元素中测试xpath,您就会知道这一点
var xpath = "//li[contains(.,'4"')]";
//就这样做
var xpath = "//li[contains(.,'4\"')]";
var matchingElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
matchingElement.setAttribute('style', 'display: none;" ) !important' );
//我正在使用的代码,按照预期删除元素
<ul class="chosen-results">
<li class="active-result result-selected" data-option-array-index="0" style="">Size</li>
<li class="disabled-result" data-option-array-index="1" style="">4" (0)</li>
<li class="disabled-result" data-option-array-index="2" style="">5" (0)</li>
<li class="active-result" data-option-array-index="3" style="">Extra Large (5)</li>
<li class="active-result" data-option-array-index="4" style="">Large (7)</li>
<li class="active-result" data-option-array-index="5" style="">Medium (8)</li>
<li class="disabled-result" data-option-array-index="6" style="">Small (0)</li>
</ul>
<script type="text/javascript">
var xpath = "//li[contains(.,'4\"')]";
var matchingElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
matchingElement.setAttribute('style', 'display: none !important;')
</script>
- 大小
- 4”(0)
- 5”(0)
- 超大(5)
- 大(7)
- 中等(8)
- 小(0)
var xpath=“//li[包含(,'4\')]”;
var matchingElement=document.evaluate(xpath,document,null,XPathResult.FIRST\u ORDERED\u NODE\u TYPE,null);
matchingElement.setAttribute('style','display:none!important;'))
尝试以下代码:
var xpath=“//li[contains(text(),'4\“)]”;
var matchingElement=document.evaluate(xpath,document,null,XPathResult.FIRST\u ORDERED\u NODE\u TYPE,null);
matchingElement.setAttribute('style','display:none;“”!important');
您也可以尝试:
var xpath=“//li[@class='disabled result'and contains(text(),'4\“)]”“
谢谢,我添加了//
,但它仍然不起作用。我确实检查了chrome inspector的elements面板,但是我没有看到任何关于Javascript的内容,所以可能我没有正确地使用它。您在运行var xpath的第一行时获得了无效或意外的令牌。原因是因为双引号。正如Monkey Coder所说,进行转义,但不要在4左右再次使用双引号,而是使用单引号。如下所示:var xpath=“//li[包含(,'4\”)]";
Hm,它仍然不起作用,但现在我得到了一个错误,无法读取null的属性setAttribute
。我感觉页面上有多个与xpath匹配的项。我刚刚尝试了两个相同的元素,它返回了'uncaughttypeerror:cannotreadproperty'setAttribute'of null at:1:17',我刚刚尝试了var xpath=“//li[contains(,'4\”)][1];
,返回了相同的错误。我发现我对“
的使用不正确,但是,唉,这也不行。我忘记了var xpath的双斜杠,你能试试编辑后的那个吗?好吧,它仍然不行,我已经试过了,还有我能想到的其他变体。我现在看到的错误是无法读取null的属性setAttribute
。请尝试var xpath=“//li[@class='disabled result'和@data option array index='1']”
我认为这不再是xpath问题,我们在我认为他们的document.evaluate行打开了一个错误。这个列表中有多少项?我们能得到无序列表中所有项目的代码吗?
<ul class="chosen-results">
<li class="active-result result-selected" data-option-array-index="0" style="">Size</li>
<li class="disabled-result" data-option-array-index="1" style="">4" (0)</li>
<li class="disabled-result" data-option-array-index="2" style="">5" (0)</li>
<li class="active-result" data-option-array-index="3" style="">Extra Large (5)</li>
<li class="active-result" data-option-array-index="4" style="">Large (7)</li>
<li class="active-result" data-option-array-index="5" style="">Medium (8)</li>
<li class="disabled-result" data-option-array-index="6" style="">Small (0)</li>
</ul>
<script type="text/javascript">
var xpath = "//li[contains(.,'4\"')]";
var matchingElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
matchingElement.setAttribute('style', 'display: none !important;')
</script>