为什么这不起作用:$(“body div button”)[0] .css

时间:2009-09-27 05:32:28

标签: jquery

鉴于此HTML:

<div id="flashcard-001" class="flashcard">
    <div class="question">What color is the sky?</div>
    <div class="answer">blue</div>
    <button class="show">Show</button>
    <button class="hide">Hide</button>
</div>

这有效:

$("div")[1].innerHTML = "What color is an apple?";
$("div")[2].innerHTML = '<span style="font-size:48pt;color:red">red</span>';

这样可行(两个按钮都变为红色):

$("body div button").css('background-color', 'red');

那么为什么这不起作用(第一个按钮不会按预期变红):

$("body div button")[0].css('background-color', 'red');

4 个答案:

答案 0 :(得分:3)

正如其他人已经指出的那样,当你使用括号语法时,你正在访问实际的DOM元素而不是jQuery对象。

尝试

$("body div button").eq(0).css('background-color', 'red');

甚至更好

$("body div button:first").css('background-color', 'red');

答案 1 :(得分:2)

在jQuery对象之后指定[0]时,您正在访问直接DOM元素,而DOM元素没有定义'css'方法(reference)。 css方法适用于jQuery对象,因为它在jQuery.prototype中定义,并且所有jQuery对象都继承该方法,这就是原因:

$('body')。css('background','red')

Works,$('body')[0] .css会抛出错误。

答案 2 :(得分:2)

如果你这样做了:

$("body div button")[0].cssText = 'background-color', 'red';

这应该有效。

当你使用[0]时,你正在查看DOM对象,所以此时你不能使用jQuery辅助函数,而只是直接转到dom属性。

答案 3 :(得分:0)

改为使用:

$("body div button:first").css(...

请参阅here