简单脚本不适用于 jQuery 中的 .prepend() 和 .css() 方法

Posted

技术标签:

【中文标题】简单脚本不适用于 jQuery 中的 .prepend() 和 .css() 方法【英文标题】:Simple script not working with .prepend() and .css() methods in jQuery 【发布时间】:2012-06-04 16:53:25 【问题描述】:

今天我遇到了一件我不太明白的有趣的事情。这个(见下文)非常简单的 jQuery 脚本不起作用,如果蓝色 == true(这是真的),基本上我想将前置 div 的背景颜色更改为红色。

var panel = $("<div id='panel'></div>");
var panelBg = $("#panel");

var test = "true";
var red  = "true";
var blue = "true";


if (test == "true") 


    if (red == "true") 

       $("#first").prepend(panel);

    



    if (blue == "true") 

       panelBg.css("background-color","red");

    



但是当我改变这一行时:

  panelBg.css("background-color","red");

到这里:

  $("#panel").css("background-color","red");

脚本有效。

工作演示: http://jsfiddle.net/wK2jw/

【问题讨论】:

【参考方案1】:

在您查找#panel 时,它还不存在于DOM 中,因此该行不返回任何对象:

var panelBg = $("#panel");

当您执行 $("#panel").css("background-color","red"); 时它会起作用,因为这是在您将具有 id=panel 的元素添加到 DOM 之后执行的

即使 panelBg 在您分配它时确实有效,panelBgpanel 引用仍将指向相同的元素,因此使用两个变量似乎没有任何意义指向同一个东西。

【讨论】:

【参考方案2】:

是的,您正在将 DOM 中尚不存在的对象分配给变量。

你可以移动 var panelBg = $("#panel");在您添加代码之后。

附带说明一下,您也可以稍微清理一下代码,而不是 if (test == "true") 您可以使用 if (test)

【讨论】:

以上是关于简单脚本不适用于 jQuery 中的 .prepend() 和 .css() 方法的主要内容,如果未能解决你的问题,请参考以下文章

JS 脚本不适用于使用 jQuery 的 .load() 加载的 div

CSS属性不适用于jQuery无限滚动中的附加项目

外部 js 脚本不适用于使用 jQuery 加载的页面

jquery UI 可拖动不适用于 AJAX

Jquery $.Post 适用于 Firefox 但不适用于 Chrome

jQuery 加载不适用于某些 .txt 文件