在click方法中使用addClass或toggleClass和JQuery不起作用?缺陷

在click方法中使用addClass或toggleClass和JQuery不起作用?缺陷,jquery,css,click,addclass,toggleclass,Jquery,Css,Click,Addclass,Toggleclass,这似乎很简单。。但它仍然不能正常工作 如果你把课堂放在高光之上,我会让它工作的。。但我不会改变 这里的风格。。只有这个职位。这没有任何意义 我似乎无法在这里粘贴html代码,所以我必须分块粘贴。我随信附上 所有代码的快照 确保您有一个空的html页面。doctype不重要。。我在不同的doctype上测试了它,但它仍然不能正常工作 这是在标题后的样式块内 .highlight { color:black; background-color:yellow; } .normal { color:w

这似乎很简单。。但它仍然不能正常工作

如果你把课堂放在高光之上,我会让它工作的。。但我不会改变 这里的风格。。只有这个职位。这没有任何意义

我似乎无法在这里粘贴html代码,所以我必须分块粘贴。我随信附上 所有代码的快照

确保您有一个空的html页面。doctype不重要。。我在不同的doctype上测试了它,但它仍然不能正常工作

这是在标题后的样式块内

.highlight { color:black; background-color:yellow; }
.normal {  color:white; background-color: blue; }
在此之后,我有一个脚本标记,其中包含最新jquery代码的源代码

在这之后是一个脚本块,下面是:

$(document).ready(function () {
  $('#maindiv').css('cursor', 'pointer');
  $('#maindiv').click(function () {
    //alert("click");
   // $(this).toggleClass("highlight"); //this does not work!
   // $(this).addClass('highlight'); //this does not work!

   // $(this).attr("class", "highlight"); //this works
   // $(this).css("background", "yellow"); this works

    // the javascript way to do this works also fine.
    // var element = document.getElementById('maindiv');
    // element.setAttribute("class", "highlight");
});
}))

在主体内部有一个ID名为“maindiv”和类为“normal”的p标记

用文本点击这里

好吧,我等不及有人也来试试。。这太疯狂了,因为其他的 干得好。但是只有.addClass和.toggleClass不能正常工作

因为我是新用户,所以不能将完整代码的快照放在这里, 但您可以从以下网址下载:

正如名字所说,addClass和toggleClass只是添加了类,这意味着您的元素仍然具有.normal,它的优先级可能高于.highlight,因此,您的颜色更改不适用。检查DOM,您将看到添加了该类。
尝试将.normal替换为.highlight,而不是在CSS中添加.highlight或place.normal over.highlight。你也可以加上!对于.highlight的属性很重要,但不建议这样做。

顾名思义,addClass和toggleClass只是添加了类,这意味着您的元素仍然具有.normal,它的优先级可能高于.highlight,因此,您的颜色更改不适用。检查DOM,您将看到添加了该类。 尝试将.normal替换为.highlight,而不是在CSS中添加.highlight或place.normal over.highlight。你也可以加上!对于.highlight的属性很重要,但不建议这样做。

尝试:

$(document).ready(function () {
    $('#maindiv').css('cursor', 'pointer');
    $('#maindiv').on('click', function() {
        $(this).toggleClass("highlight").toggleClass('normal');
    });
});  
没有尝试您的代码,但我假设它添加了类,但是由于您从未删除“普通”类,css不会被覆盖

此外,为了优化,请尝试将javascript中的.css保持在最小值。将maindivs游标设置为指针也可以在.css文件中轻松设置。 并避免.click/.live/.bind等,它们都不推荐使用,并且都链接到新的.on函数。所以直接使用.on即可

哦,还有!css中的重要元素会起作用,但这也是你应该尽量避免的,这只会让你以后更加困难。

试试:

$(document).ready(function () {
    $('#maindiv').css('cursor', 'pointer');
    $('#maindiv').on('click', function() {
        $(this).toggleClass("highlight").toggleClass('normal');
    });
});  
没有尝试您的代码,但我假设它添加了类,但是由于您从未删除“普通”类,css不会被覆盖

此外,为了优化,请尝试将javascript中的.css保持在最小值。将maindivs游标设置为指针也可以在.css文件中轻松设置。 并避免.click/.live/.bind等,它们都不推荐使用,并且都链接到新的.on函数。所以直接使用.on即可


哦,还有!css中的重要内容会起作用,但这也是您应该尽量避免的,这只会使您以后的工作更加困难。

对我来说很好。。。可能是您有另一个类覆盖了新类。使用firebug检查html以查看是否添加了该类。尝试删除该类。也正常。。。这可能会造成干扰。通常,当您将类指定给元素时,它们按照属性在CSS定义中的顺序获取属性。在CSS定义中,由于normal位于HIGHT之后,所以normal可能会覆盖新的HIGHT类。你可以做的另一件事是添加!对highlight类很重要,例如,
。highlight{color:black!important;background color:yellow!important;}
在这里使用忍者代码是一个不错的选择。对我来说很好。。。可能是您有另一个类覆盖了新类。使用firebug检查html以查看是否添加了该类。尝试删除该类。也正常。。。这可能会造成干扰。通常,当您将类指定给元素时,它们按照属性在CSS定义中的顺序获取属性。在CSS定义中,由于normal位于HIGHT之后,所以normal可能会覆盖新的HIGHT类。你可以做的另一件事是添加!对highlight类很重要,例如,
。highlight{color:black!important;background color:yellow!important;}
在这里使用忍者代码是一个不错的选择。伟大的感谢您的测试和建议!我希望我能给你们一些分数,但我是新的,所以还没有这个功能。太好了!感谢您的测试和建议!我希望我能给你们一些分数,但我是新手,所以还没有这个功能。