JQuery选择器

时间:2009-06-22 23:37:51

标签: jquery dom

给定以下无序列表,JQuery选择器$("#root #2")选择:

/ul/li/ul[@id='root']/li/ul[@id='1']/li/ul[@id='2']

我希望它选择较短的路径:

/ul/li/ul[@id='root']/li/ul[@id='2']

任何想法?

<ul>
    <li>root
        <ul id="root">
            <li>1
                <ul id="1">
                    <li>2
                        <ul id="2"> <!--*selecting this*-->
                            <li>3<ul id="3"></ul></li>          
                            <li>4<ul id="4"></ul></li>
                        </ul>
                    </li>
                    <li>3<ul id="3"></ul></li>
                </ul>   
            <li>2
                <ul id="2"> <!-- *expecting this* -->                   
                    <li>3
                        <ul id="3"> 
                            <li>4<ul id="4"></ul></li>
                        </ul>
                    </li>
                </ul>
            </li>
            <li>3<ul id="3"></ul></li>
            <li>4<ul id="4"></ul></li>
        </ul>
    </li>
</ul>

4 个答案:

答案 0 :(得分:10)

行为可能未定义/未达到预期的两个原因:

  1. ID应该是唯一的,并且您收到的路径位于源中所需的路径之前。
  2. (在这种情况下不太可能)ID为expected to begin with a letter

答案 1 :(得分:2)

使用选择器中的空格选择任何祖先。我的预感是,由于id = 2的li位于DOM之前的id = 2的ul之前,jQuery会停止(因为id应该是唯一的)。

我希望这不是真正的HTML ...因为id应该是唯一的。

答案 2 :(得分:1)

您正在使用后代运算符,它将搜索所有后代。我想jQuery在搜索DOM树时使用深度优先搜索算法。这就解释了为什么你首先得到最长的。至于为什么jQuery只返回一个节点,你使用ID选择器,它应该在所有DOM节点中都是唯一的。我希望jQuery在第一场比赛后返回,因为遍历树的其余部分是没有意义的。

答案 3 :(得分:1)

此选择器应返回ID为2的任何元素,该元素是ID为root的任何元素的后代,以DOM顺序排列。我希望它能够返回你在问题中提到的两个元素。更深层次的将是第一个,因为它是文档中的第一个。

请注意,ID应该是唯一的。如果有两个ID为2的元素,则会出错。