【发布时间】:2019-09-16 02:15:53
【问题描述】:
我需要使用 JavaScript 来动态设置 PHP 应用程序的输出样式,该应用程序并排显示产品信息以进行比较(我无法编辑此 PHP 应用程序)。
每个产品的字段都获得相同的 ID(即,如果比较两个产品,我会得到两个具有相同 ID 的 s,cf1 到 cf5)。
我尝试使用 querySelectorAll 来获取 ID 出现的数组,然后遍历它们并比较它们,但没有得到任何结果。
HTML:
<div class="inner">
<div class="comparison-div half" id="product-comparison-11">
<div class="cf field" id="cf-1">
<div class="cf-label label">Field 1 label:</div>
<div class="cf-value value">Field 1 value</div>
</div>
<div class="cf field" id="cf-2">
<div class="cf-label label">Field 2 label:</div>
<div class="cf-value value">Field 2 unique value A</div>
</div>
</div>
<div class="comparison-div half" id="product-comparison-15">
<div class="cf field" id="cf-1">
<div class="cf-label label">Field 1 label:</div>
<div class="cf-value value">Field 1 value</div>
</div>
<div class="cf field" id="cf-2">
<div class="cf-label label">Field 2 label:</div>
<div class="cf-value value">Field 2 unique value B</div>
</div>
</div>
</div>
JS:
var cf1 = document.querySelectorAll("div#cf-1");
var cf2 = document.querySelectorAll("div#cf-2");
for (var i = 0, max = cf1.length; i < max; i++) {
if (Object.is(cf1[i], cf1[i++]) == false) {
cf1[i--].style.backgroundColor = "red";
cf1[i].style.backgroundColor = "red";
}
}
for (var i = 0, max = cf2.length; i < max; i++) {
if (Object.is(cf2[i], cf2[i++]) == false) {
cf2[i--].style.backgroundColor = "red";
cf2[i].style.backgroundColor = "red";
}
}
JSFiddle:http://jsfiddle.net/coisos/j45p0adt/
我希望 cf2 获得红色背景,因为每次出现的内容都不同。相反,似乎代码没有效果。
【问题讨论】:
-
ID 必须是唯一的。改用一个类。
-
两个元素不能有相同的ID
-
Object.is(cf1[i], cf1[i++])两个不同的对象总是不同的。 -
@Keith 你错过了 id 的意义——它用于识别某些东西,所以必须是唯一的,如果你验证你的代码并且有重复的 id,它就会被归类为无效,所以你真的不应该不要这样做——仅仅因为你不能做到这一点
-
@Keith "id: ... 不得文档中的多个元素具有相同的 id 值..." ( Source)
标签: javascript