jquery复杂选择器类+属性

时间:2014-12-08 15:05:33

标签: jquery jquery-selectors

我需要找到类MyClass1的元素,它具有属性编号。我的尝试是:

 $(".MyClass1[number=" + userId + "]") 

但它没有用。我的错误在哪里?

 <tr class = "Myclass2">
    <td>
     <a href="#" number="5" title="checkselector" class="MyClass1">blablabla=)</a>           
    </td>
 </tr>

2 个答案:

答案 0 :(得分:2)

这方面有两个方面:

  1. 你匹配的

    如果您只是想知道它有一个属性,而不是设置为特定值,请不要使用=和值:

    $(".MyClass1[number]") 
    

    这将匹配具有number属性的任何元素以及该代码行运行时存在的类MyClass1

    根据您的修改,听起来您正在尝试匹配特定的数字。假设userId包含12

    var userId = 12;
    

    ...那么你的代码很好:

    $(".MyClass1[number=" + userId + "]") 
    

    ...因为评估结果为:

    $(".MyClass1[number=12]") 
    

    可以在值周围加上引号,但如果值包含空格或其他几个非字母数字字符,则需要。如果您知道它是一个数字(因此只包含数字),则不需要它们。

  2. 时与您匹配

    之前我曾说过&#34;这将匹配任何元素与......在该行代码运行时存在。&#34; 这很重要。如果代码在上面的元素中,则它不会找到它,因为该元素尚不存在:

    <!-- Doesn't work -->
    <script>
        $(".MyClass1[number=12]").css("color", "green");
    </script>
    <!-- ... -->
    <a href="#" number="12" title="@Resources.Appoint" class="MyClass1">Joe BLoggs</a>
    

    但是如果脚本是之后的,那么元素就存在并且可以找到:

    <a href="#" number="12" title="@Resources.Appoint" class="MyClass1">Joe BLoggs</a>
    <!-- Works -->
    <script>
        $(".MyClass1[number=12]").css("color", "green");
    </script>
    <!-- ... -->
    

    通常的建议是将您的脚本放在页面末尾,就在结束</body>标记之前。但是,如果你不控制他们去哪里,你可以使用jQuery的ready函数:

    $(document).ready(function() {
        // ...your code here...
    });
    

    ......也可以缩短为:

    $(function() {
        // ...your code here...
    });
    

答案 1 :(得分:2)

您错过了引号:

 $(".MyClass1[number='" + userId + "']")