设置没有值的属性

Dav*_*ing 190 javascript jquery attributes attr

如何在不添加jQuery值的情况下设置数据属性?我要这个:

<body data-body>
Run Code Online (Sandbox Code Playgroud)

我试过了:

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

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

Lix*_*Lix 241

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

$('body').attr('data-body','');
Run Code Online (Sandbox Code Playgroud)

空字符串将只创建没有值的属性.

<body data-body>
Run Code Online (Sandbox Code Playgroud)

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

attr(attributeName,value)

  • 注意:这不适用于jQuery 1.7.2(我知道这不是最新版本),但使用`$(el).prop('data-body',true)`对我来说在$(el)中工作. attr('data-body','')`最终为我设置了data-body ="data-body". (24认同)
  • +1,但OP知道它是一个二传手.传递空字符串的工作原理但是`null`并不令人惊讶. (23认同)
  • @ PatrickO'Doherty` $(el).prop('data-body',true)`对我不起作用.`attr()`确实有效但它还添加了一个空字符串作为我想要添加的属性的值. (6认同)
  • [Javasctipt有一些奇怪的行为](http://www.youtube.com/watch?v=kXEgk1Hdze0).知道这些奇怪发生的地方将会消除惊慌失措的因素:P (2认同)

Cal*_*ean 42

也许试试:

var body = document.getElementsByTagName('body')[0];
body.setAttribute("data-body","");
Run Code Online (Sandbox Code Playgroud)

  • 只有这个解决方案适用于我`var btn = $(this).get(0); btn.setAttribute( "禁用", "");` (2认同)
  • `body.setAttribute("data-body","");` 这将设置我的属性的“假”值,如何设置属性的“”(空)值? (2认同)

Cha*_*lie 22

接受的答案不创建一个名称只读属性了(9月2017).

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

$(body).prop('data-body', true)
Run Code Online (Sandbox Code Playgroud)


小智 8

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

document.querySelector('#selector').toggleAttribute('data-something');
Run Code Online (Sandbox Code Playgroud)

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

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


小智 6

您无需jQuery就可以做到!

例:

document.querySelector('button').setAttribute('disabled', '');
Run Code Online (Sandbox Code Playgroud)
<button>My disabled button!</button>
Run Code Online (Sandbox Code Playgroud)

要设置布尔属性的值(例如禁用),可以指定任何值。建议使用空字符串或属性名称。重要的是,如果根本不存在该属性,则不管其实际值如何,都将其值视为真实。该属性的缺失表示其值是false。通过将Disabled属性的值设置为空字符串(“”),我们将disable设置为true,这将导致按钮被禁用。

来自MDN Element.setAttribute()

  • jQuery 在这方面太脆弱了。最好用 javascript 来做,以免每次 jquery 或浏览器改变时你都会发疯。这适用于所有这些有缺陷的客户端框架。 (2认同)

vee*_*ram 5

只需尝试一下,它肯定会起作用......

document.querySelector("audio").setAttribute("autoplay", "");

这将显示如下代码;-

<audio autoplay>

</audio>
Run Code Online (Sandbox Code Playgroud)

如果你写的是,

$("audio").attr("autoplay", "");

然后,这将显示如下代码;-

<audio autoplay="autoplay">

</audio>
Run Code Online (Sandbox Code Playgroud)