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>