Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用XPath选择包含特定文本的LI时遇到问题_Javascript_Html_Css_Wordpress_Xpath - Fatal编程技术网

Javascript 使用XPath选择包含特定文本的LI时遇到问题

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行的情

以下是列表项的HTML:

<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>