0

我想用 jQuery 替换旧的 html 元素类。这是我正在做的事情:

var elem = $('.my_selector')[0];
elem.css('class', 'my_new_class');

但我收到错误消息“未捕获的类型错误:Object#<HtmlDivElement> has no method css.

我如何解决它?

4

7 回答 7

2

$('.my_selector')[0]正在返回一个 DOM 元素,而不是一个 jQuery 对象。您还需要使用addClass方法而不是css. 要获取第一个元素,可以使用:first伪选择器。

所以这应该是你正在寻找的:

$('.my_selector:first').removeClass('my_selector').addClass('my_new_class');

编辑您可以使用removeClass/addClasstoggleClass. 两者都很好。如果您有一个元素可以同时具有两个类的情况,那么显式添加新类可能会更安全,因为toggleClass这将删除这两个类。

于 2013-04-18T11:48:38.783 回答
2

问题是您试图css()从 DOM 元素中调用 jQuery 方法(甚至在这里不相关),该元素是用[0]. 你可以toggleClass()用来做这项工作:

$(".my_selector:first").toggleClass("my_selector my_new_class");
于 2013-04-18T11:51:19.600 回答
1
var elem = $('.my_selector')[0];

这将返回 DOM 元素,而不是 jQuery 对象。只需将其更改为...

var elem = $('.my_selector');

要仅获取与选择器匹配的第一个元素,请使用此...

var elem = $('.my_selector').first();

还有,你有...

elem.css('class', 'my_new_class');

这是不正确的,应该改为这个......

elem.attr('class', 'my_new_class');
于 2013-04-18T11:48:32.617 回答
0

尝试这个 ,

var elem = $(".my_selector");
elem.class("newclass");

否则你可以这样做,

var elem = $(".my_selector");
elem.removeClass("my_selector");
elem.addClass("newclass");
于 2013-04-18T11:50:48.290 回答
0
$(".my_selector").removeClass('currentClass').addClass('newClass');
于 2013-04-18T11:57:17.120 回答
-1

如前所述,您需要第一个元素的 jquery 对象。一个好的方法可能是这样的:

$('.my_selector').first().css('class', 'my_new_class');

此外,方法签名的目的是.css( propertyName, value )设置一个 CSS 属性而不是更改一个类。为此,您需要删除旧类并.removeClass分别使用 和 添加新类.addClass

于 2013-04-18T11:52:13.953 回答
-3

$($('.my_selector')[0]).css('class', 'my_new_class');

document.getElementsByClassName('my_selector')[0].className = 'my_new_class';
于 2013-04-18T11:50:23.850 回答