设置没有值的属性

IT技术 javascript jquery attributes attr
2021-01-28 08:27:46

如何设置数据属性而不在 jQuery 中添加值?我要这个:

<body data-body>

我试过:

$('body').attr('data-body'); // this is a getter, not working
$('body').attr('data-body', null); // not adding anything

其他一切似乎都将第二个参数添加为字符串。是否可以只设置一个没有值的属性?

6个回答

attr()函数也是一个setter函数。你可以只传递一个空字符串。

$('body').attr('data-body','');

空字符串将简单地创建没有值的属性。

<body data-body>

参考 - http://api.jquery.com/attr/#attr-attributeName-value

attr( 属性名称 , 值 )

+1,但 OP 知道它是一个二传手。传递空字符串有效但null并不令人惊讶的事实
2021-03-14 08:27:46
@PatrickO'Doherty$(el).prop('data-body', true)对我不起作用。 attr()确实有效,但它还添加了一个空字符串作为我要添加的属性的值。
2021-03-19 08:27:46
Javasctipt 有一些奇怪的行为知道这些奇怪的事情发生的地方将消除惊喜的元素:P
2021-04-04 08:27:46
注意:这不适用于 jQuery 1.7.2(我知道这不是最新版本)但使用$(el).prop('data-body', true)对我有用,$(el).attr('data-body', '')最终为我设置了 data-body="data-body"。
2021-04-10 08:27:46
@Andrew 我相信您正在寻找removeAttr/prop函数。这取决于您要删除的属性。
2021-04-11 08:27:46

也许尝试:

var body = document.getElementsByTagName('body')[0];
body.setAttribute("data-body","");
body.setAttribute("data-body",""); 这将设置我的属性的“假”值,如何设置属性的“”(空)值?
2021-03-17 08:27:46
只有这个解决方案对我有用 var btn = $(this).get(0); btn.setAttribute("disabled","");
2021-03-30 08:27:46
在弄乱 .attr 和 .prop 之后,就像这里所有其他解决方案和评论中所建议的那样,我终于发现回到(或至少“中途”返回)原生 JS,做到了这一点,就像在上面的评论......为此干杯!
2021-04-04 08:27:46

接受的答案不会再创建一个名称唯一属性(9月2017)。

您应该使用 JQuery prop()方法来创建仅名称属性。

$(body).prop('data-body', true)
实际上,我似乎在我的选择选项中添加了“value='true'”,而不仅仅是“value”。啊。
2021-03-15 08:27:46
我想知道接受的答案如何不包含此解决方案!这是使用 jquery 的最干净的方式。
2021-03-25 08:27:46
不幸的是,在选择下拉选项中不起作用,在 Chrome 中
2021-03-31 08:27:46

不用 jQuery 你也能做到!

例子:

document.querySelector('button').setAttribute('disabled', '');
<button>My disabled button!</button>

要设置布尔属性的值,例如禁用,您可以指定任何值。空字符串或属性名称是推荐值。重要的是,如果该属性完全存在,无论其实际值如何,其值都被认为是真实的。缺少该属性意味着其值为 false。通过将 disabled 属性的值设置为空字符串 (""),我们将 disabled 设置为 true,这会导致按钮被禁用。

来自MDN Element.setAttribute()

jQuery 在这方面太古怪了。最好用 javascript 做,以免每次 jquery 或浏览器更改时都让自己发疯。这适用于所有这些有缺陷的客户端框架。
2021-03-30 08:27:46

不确定这是否真的有益,或者为什么我更喜欢这种风格,但我所做的(在 vanilla js 中)是:

document.querySelector('#selector').toggleAttribute('data-something');

这将在没有值的情况下以全小写形式添加属性,或者如果元素上已经存在该属性,则将其删除。

https://developer.mozilla.org/en-US/docs/Web/API/Element/toggleAttribute

我仍然没有找到解决方案。在我的项目中,使用这种方法时我仍然得到 data-something=""。
2021-04-09 08:27:46