Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么下面的javaScript代码不返回任何元素?_Javascript_Html - Fatal编程技术网

为什么下面的javaScript代码不返回任何元素?

为什么下面的javaScript代码不返回任何元素?,javascript,html,Javascript,Html,为什么下面的javaScript代码不返回任何元素 以下是html代码: <div class="misc" data-custom-test="test1" data-custom-test="test2"></div> 谢谢。当我在Chrome中的JSFIDLE中运行实验时,document.queryselectoral()仅当具有给定属性名称的第一个属性与选择器匹配时,才会在给定元素上找到匹配项。或者换句话说,如果您有同一属性的多个定义,document.que

为什么下面的javaScript代码不返回任何元素

以下是html代码:

<div class="misc" data-custom-test="test1" data-custom-test="test2"></div>

谢谢。

当我在Chrome中的JSFIDLE中运行实验时,
document.queryselectoral()
仅当具有给定属性名称的第一个属性与选择器匹配时,才会在给定元素上找到匹配项。或者换句话说,如果您有同一属性的多个定义,
document.querySelectorAll()
在其中任何一个中都找不到匹配项,而不是第一个

我还没有测试过其他浏览器,看看它们在这方面的表现如何,但这足以告诉您,像您一样使用相同属性名称的多个定义存在问题

此外,标签中明确指出,在同一标签中不能有重复的属性

同一开始标记上不得有两个或多个属性 名称之间是不区分大小写的ASCII匹配


我不知道您真正想解决的是什么问题,但一种常见做法是在同一属性定义上使用多个值,方法是使用分号之类的分隔符分隔多个值,然后可以使用选择器中的
*=
运算符查找包含如下子字符串的属性:

<div class="misc" data-custom-test="test1;test2"></div>

var elements = document.querySelectorAll('[data-custom-test*="' + "test2" + '"]');
console.log(elements.length);

var elements=document.querySelectorAll(“[data custom test*=”+“test2”+“]”);
console.log(elements.length);

当我在Chrome中的JSFIDLE中运行实验时,
document.querySelectorAll()
将仅在具有给定属性名称的第一个属性与选择器匹配时,才会在给定元素上找到匹配项。或者换句话说,如果您有同一属性的多个定义,
document.querySelectorAll()
在其中任何一个中都找不到匹配项,而不是第一个

我还没有测试过其他浏览器,看看它们在这方面的表现如何,但这足以告诉您,像您一样使用相同属性名称的多个定义存在问题

此外,标签中明确指出,在同一标签中不能有重复的属性

同一开始标记上不得有两个或多个属性 名称之间是不区分大小写的ASCII匹配


我不知道您真正想解决的是什么问题,但一种常见做法是在同一属性定义上使用多个值,方法是使用分号之类的分隔符分隔多个值,然后可以使用选择器中的
*=
运算符查找包含如下子字符串的属性:

<div class="misc" data-custom-test="test1;test2"></div>

var elements = document.querySelectorAll('[data-custom-test*="' + "test2" + '"]');
console.log(elements.length);

var elements=document.querySelectorAll(“[data custom test*=”+“test2”+“]”);
console.log(elements.length);

问题在于元素不能有重复的属性()。根据Jukka K.Korpela的回答中提供的信息:

同一开始标记上不得有两个或多个名称彼此不区分大小写的ASCII匹配的属性

结果可能因浏览器而异,但通常第二个属性会被直接忽略。例如,如果您具有重复的
样式
属性,则会发生相同的情况:


是红色还是蓝色?
问题是元素不能有重复的属性()。根据Jukka K.Korpela的回答中提供的信息:

同一开始标记上不得有两个或多个名称彼此不区分大小写的ASCII匹配的属性

结果可能因浏览器而异,但通常第二个属性会被直接忽略。例如,如果您具有重复的
样式
属性,则会发生相同的情况:


它是红色还是蓝色?
只需查看finish html:您的div刚刚拥有第一个attribute@hendry:不确定您链接到该帮助文章的原因。你在问题中没有看到MCVE吗?只需看看FinishHTML:你的div刚刚开始attribute@hendry:不确定您链接到该帮助文章的原因。您在问题中没有看到MCVE吗?可能是首先应用规范?接下来就忽略?或者,使用空格作为分隔符允许您使用
[data custom test~=test2]
,确保不会错误地匹配部分值,但它有一个警告,即保留空格字符作为分隔符。可能是先应用规范?然后忽略?或者,使用空格作为分隔符允许您使用
[data custom test~=test2]
,确保不会错误地匹配部分值,但需要注意的是保留空格字符作为分隔符。