Html 设置假值与删除属性
我读了一些关于布尔属性的内容,它说对于布尔属性(在这个特定的例子中,Html 设置假值与删除属性,html,boolean,Html,Boolean,我读了一些关于布尔属性的内容,它说对于布尔属性(在这个特定的例子中,的循环属性),无论您设置了什么值,它都将被识别为“true”。为了真正设置为falsy,您不能像loop=false那样设置它,也不能将javascript设置为['loop']=false,但必须删除该属性,例如通过执行removeAttribute('loop')。这是真的吗 我起初相信它,但就用Chrome检查而言,似乎设置为['loop']=false实际上会使它被识别为falsy。我不确定这一事实在交叉浏览时有多有力。
的循环
属性),无论您设置了什么值,它都将被识别为“true”。为了真正设置为falsy,您不能像loop=false
那样设置它,也不能将javascript设置为['loop']=false
,但必须删除该属性,例如通过执行removeAttribute('loop')
。这是真的吗
我起初相信它,但就用Chrome检查而言,似乎设置为
['loop']=false实际上会使它被识别为falsy。我不确定这一事实在交叉浏览时有多有力。浏览器之间有什么区别吗?这里解释了布尔属性:
某些属性扮演布尔变量的角色(例如,选定的
选项元素的属性)。它们在开始标记中的外观
元素的值表示该属性的值为“true”。他们的
缺席意味着“假”值
布尔属性可以合法地接受单个值:属性的名称
属性本身(例如,selected=“selected”)
因此,虽然一些浏览器可能会将字符串“false”解释为未设置值,但其他浏览器可能不会这样做(这是正确的行为)。事实上,据我所知(或所想),任何非空字符串通常都会将值设置为on/true(不管规范中说什么是合法值)。我相信这也是一种未定义的行为,所以这种行为可能也会发生变化,或者在不同的浏览器中有所不同(不要依赖它)
底线是,仅仅因为一两个浏览器可能会偏离规范并不意味着您应该这样做。完全删除该属性是一种方法
附录:仔细查看您的评论和问题,我认为您可能会对属性值感到困惑。在HTML中,attr=false
和attr=“false”
完全相同。任何版本的HTML都不需要引号(除非在值包含空格时需要引号来消除歧义)。例如:
<input class=required>
<!-- This is fine -->
<input class=title required>
<!-- this is fine too, but "required" will be parsed as an attribute -->
<input class="title required">
<!-- To have two classes, we need the quotes -->
所有属性值(在包含它们的元素上)都被视为字符串。换句话说,HTML中没有像javascript中那样的真正的布尔值(或NULL
value)。所以将来需要它的人:
loop=false
将保持true
,除非整个loop
属性被删除。基本上,只存在循环
是标记需要做的其他事情。您需要使用类似jQuery的方法来删除entier循环
属性(或者至少我会这么做)。现在,如果将不同的未定义属性设置为false
,则可以将其识别为false
,这会混淆字符串和真正的布尔类型。Javascript有一个布尔数据类型,有两个可能的值true和false(不带引号)。字符串可以包含任何文本,也可以包含带引号的“true”和“false”。将属性设置为非null和非false将生成true,因此将满足以下条件:
var a = true; // true
var b = false; // false
var c = "true"; // true
var d = "false" // true
var e = null; // false;
var f = 0; // false
var g = 1; // true
注意与C的相似之处。音频元素是HTML5元素,因此关于其含义,您应该参考HTML5草稿。在本例中,请参见WHATWG草案的开发者版本中的。实际上,它表示a)属性的存在或不存在决定了DOM属性值是true
还是false
,b)作为文档的要求,该值必须为空或(不区分大小写)属性名称,在本例中为loop='
或loop=“loop”
。在值周围使用引号是在别处定义的
因此,浏览器需要识别loop=false
来表示与loop=loop
或loop=true
相同的意思,但作者不得使用此类结构,HTML5检查程序会发出关于它们的错误消息
(基本上,您应该在HTML5的HTML序列化中使用loop
,在XHTML序列化中使用loop=“loop”
)
因此,如果在JavaScript中有一个变量x
,其值为audio
元素对象,x.loop
的值为true
或false
,而x.attributes['loop'].value
表示HTML标记中使用的值(通常不感兴趣)
Firefox还有一个更复杂的问题:它似乎仍然不支持循环
属性(参见问题)。这意味着,如果您设置例如loop=“loop”
,x.attributes['loop'].value
将是loop
,但Firefox甚至没有设置x.loop
(即它是未定义的),更不用说实现功能了。我更喜欢这样的词,将值存在视为真,这样做比设置为假更安全。-他实际上指的是其中的HTML部分,而不是JS。这个问题没有正确标记是的,对不起。误解了这个问题嘿,这不是因为我读得不够仔细。。。这种情况下,它被标记为“javascript”!我是通过javascript来实现的,我区分了false
和“false”
。感谢您的补充,但我知道在html中,它们被解释为字符串。这就是我提到javascript的原因。在javascript中,我可以做类似于['loop']=false
的事情,而false
周围没有引号,这与['loop']=false
不同。你的回答很有帮助。@sawa:那么对附录的事很抱歉。我从未在javascript中看到过类似于['loop']=false
的东西,可能是element.loop=false
。不知道你从哪里得到的语法?我是艾尔斯