带上下文的jQuery选择器不起作用

时间:2012-05-21 12:13:29

标签: jquery selector

我希望此代码仅在最后一个div(Div5)上更改文本,但不会:

<script type="text/javascript" language="javascript">
    $(document).ready(function() {
        $(".blue", "#Div5").text("Hello");
    });
</script>

<form id="form1" runat="server">
<div>

    <div id="Div1" class="blue">AAAA</div>
    <div id="Div2" class="yellow">BBBB</div>
    <div id="Div3" class="blue">CCCC</div>
    <div id="Div4" class="yellow">DDDD</div>
    <div id="Div5" class="blue">EEEE</div>

</div>
</form>

有人碰巧知道什么是错的吗?

7 个答案:

答案 0 :(得分:1)

在div中寻找.blue,在语义上等同于

$("#Div5").find(".blue").text("Hello");

你想:

$("#Div5.blue").text("Hello");

......相当于:

if ($("#Div5").hasClass("blue")) {
    $("#Div5").text("Hello");
}

答案 1 :(得分:0)

也许是这样?

$("#Div5").text("Hello");

答案 2 :(得分:0)

上下文用于指定容器元素。在您的示例中,您将在上下文中引用与选择器相同的元素。

您可以简化为:

$("#Div5").text("Hello");

或者,如果您仍想明确指定类:

$("#Div5.blue").text("Hello");

两者都会有相同的结果。

答案 3 :(得分:0)

在这种情况下,您无法使用上下文(即容器)。你应该像这样定位你的元素:

$("#Div5.blue");

答案 4 :(得分:0)

您只需要

$(document).ready(function() {
    $("#Div5").text("Hello");
});

您尝试做的是在标签内找到标有blue 的标签,ID为“Div5”。由于没有嵌套的div,因此无效。

答案 5 :(得分:0)

这不是一个上下文选择器,因为它们都是你的html中的相同元素

 $(".blue", "#Div5")

表示选择#div5

子项的.blue项

所以那个html就是

<div id="div5">
<div class="blue"></div>
</div>

你只需要$('#div5')。text('text');

答案 6 :(得分:0)

我认为context参数必须是一个jQuery对象,或者至少是一个HTMLDOMElement(或者他们被称为的任何东西。:P)

jQuery(document).ready(function(){
    var $contextElement = jQuery("#Div5");
    jQuery(".blue", $contextElement).text("Hello");
});

但是,从你的标记来看,我会说你根本不想使用上下文,而只是选择器,就像这样:

jQuery("#Div5").text("woop woop!");

您甚至不需要定位blue类,因为ID是唯一的。实际上,即使你有两个ID为Div5的元素,jQuery也只返回一个,第一个。