javascript";这";未能确定目标
第一个例子我做错了什么?它不是针对跨度和应用背景色。但第二个例子效果很好 第一 第二javascript";这";未能确定目标,javascript,jquery,this,Javascript,Jquery,This,第一个例子我做错了什么?它不是针对跨度和应用背景色。但第二个例子效果很好 第一 第二 $(此)作用域在遍历对象列表的函数中可用 例如.each(),.exists()等等,而不是处于简单的if/else状态 应该做的是: $(".done").each(function(){ $(this).css("background","red"); }); 这个值不受通过jQuery运行选择器的影响。事实上,您根本无法在特定函数的范围内更改此值 你可以试试这个: if($(".done").l
$(此)
作用域在遍历对象列表的函数中可用
例如.each()
,.exists()
等等,而不是处于简单的if/else
状态
应该做的是:
$(".done").each(function(){
$(this).css("background","red");
});
这个
值不受通过jQuery运行选择器的影响。事实上,您根本无法在特定函数的范围内更改此
值
你可以试试这个:
if($(".done").length > 0) {
$('done').each(function() { $(this).css("background","red"); });
}
当然,最好缓存
$(“.done”)
这件事。在这种情况下,如果这就是所有的代码,那么就没有理由对长度进行测试。您只需将整个if
条件替换为:
$(".done").css("background", "red");
如果没有匹配的元素,CSS选择器将返回一个空数组,并且不会发生任何事情。如果有匹配的元素,红色背景色将应用于所有元素
就您关于
这个
变量的问题而言,它通常在匿名回调中可用,但在if
条件中不可用。这个
指的是当前选定的对象/元素,并以其为目标。如果您的语句未选择任何内容,请执行以下操作:
if($(".done").length > 0) { // tests if $('.done') exists, but doesn't select the objects.
// therefore the 'this' doesn't target/refer to anything
$(this).css("background","red");
}
请尝试:
if ($('.done').length) {
$('.done').css('background-color','red');
}
值得注意的是,虽然if
测试$('.done')
选择器返回的对象是否存在,但是如果省略if
测试,并且选择器与任何内容都不匹配,jQuery不会抛出错误,它只会不执行任何操作()
在这种情况下,使用纯JavaScript实现相同的结果并不难:
var doneClassElem = document.getElementsByClassName('done');
for (i=0; i<doneClassElem.length; i++){
doneClassElem[i].style.backgroundColor = 'red';
}
var doneClassElem=document.getElementsByClassName('done');
for(i=0;ijQuery只在回调中绑定到它,但这里根本不使用回调
$('.done').click(function() {
$(this).hide()
});
防止对over-in-code-liek调用$()
函数的常见方法是将结果缓存到本地变量
var $done = $('.done')
if ($done.length > 0) {
$done.css('background', 'red');
}
有些不相关,但您不需要执行length
检查。即使jQuery选择器匹配零项,您也可以安全地在该集合上调用其他jQuery方法,而不会出现错误
此外,您应该在此处使用css类,而不是像这样内联编辑样式。然后使用addClass()
使其成为样式表中具有红色的类
然后,所有这些代码变得非常简单:
$('.done').addClass('myClassThatMakesItRed');
如果这是您的全部代码,那么它将不起作用,因为这将是全局对象,可能是浏览器中的窗口
当您使用jQuery绑定到事件时,事件处理程序函数的上下文已更改,以便引用触发事件的元素
您的代码可以更好地表示为
$(".done").css("background", "red")
因为您实际上不需要检查是否有匹配的元素。在第一个示例中,这是模棱两可的。请注意,这是任何函数的调用上下文。如果您在jQuery的事件处理程序中使用该代码片段,它将无法工作
例如:
// won't work
function red() {
// this = window -- in this case
$(this).css("background","red");
}
red();
// works
$(".done").click(function() {
// this = $(".done") -- set by jQuery
$(this).css("background","blue");
});
这个
的内容不受if
语句的影响。编写与您相同的代码,但以不同的方式编写可能会让您更清楚
您的代码是:
if($(".done").length > 0) {
$(this).css("background","red");
}
您希望此
引用$(“.done”)
的数组。以下内容在语义上完全相同:
var l = $(".done").length;
var z = 0;
if(z < l) {
$(this).css("background","red");
}
希望这能有所帮助。你需要显示更多的代码。我们看不懂你的心思。给我们看html和整个函数JS中关于这篇的好文章:你希望这篇应该设置为上一次jQuery的结果吗?@James:这是一篇好文章,但是OP在一个非常特定的上下文中与这篇相混淆。我认为Marek是对的,OP与jQuery事件处理程序或循环混淆了,这些事件处理程序或循环将this
设置为相关的jQuery对象。我认为您甚至不需要if
条件不需要if条件,也不需要。每个方法调用。@Darin Dimitrov当然需要,但原始问题要求解释为什么没有设置此
。从更大的意义上说,你是对的-只是$('.done')。css('background','red');
就是所需要的。Ty@Pointy,实际上我的问题是我使用了“this”对于一个if语句,wich是错误的。Marek有一个很好的答案,但他编辑了它。ty但是我想删除元素,如果找到了,css只是为了看看它是否被正确定位
if($(".done").length > 0) {
$(this).css("background","red");
}
var l = $(".done").length;
var z = 0;
if(z < l) {
$(this).css("background","red");
}
<script>
alert(this == window); // true
function function1(){
alert(this == window); // true
}
function1();
// now let's create our own instance of an object
var myObject = new Object();
myObject.method1 = function(){
alert(this == myObject); // true
}
myObject.method1();
</script>