元素ID未被识别且未触发功能

Jos*_*hMc -2 html javascript jquery dom jquery-selectors

我正在尝试在选择特定字体样式时为用户创建简单的选择选项.如果他们点击字体div,其背景div应该改变颜色.

我遇到的问题是第一种字体div在改变颜色时效果很好 - 但是其他字体div并不适用.

的jsfiddle

HTML

<div class="fonts">
  <div id="font" class="minecraft-evenings">
      Hello
      <p>Minecraft Evenings</p>
  </div>
  <div id="font" class="minecrafter">
      Hello
      <p>Minecrafter 3</p>
  </div>
  <div id="font" class="volter">
      Hello
      <p>Volter</p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

的JavaScript/JQuery的

$(document).ready(function() {
    $('#font').click(function() {
        $(this).css("background-color", "#000");
        $('#font').not(this).css("background-color", "#f1f1f1");
    });
});
Run Code Online (Sandbox Code Playgroud)

Dal*_*las 6

问题:
ID是唯一的标识符.如果要识别多个元素,则应该使用类.出于这个原因,当您使用ID选择时$("#font"),jQuery(使用本机javascript getElementById)将仅返回它具有该ID的第一个元素.这是因为如果DOM有效,它不应再找到该ID的实例,并且继续查找将浪费处理.

解决方案:从您的s中
删除fontID,div然后将其替换为类,例如class="font".由于您已经识别了一些类,因此可以使用以空格分隔的多个类,例如:class="font minecrafter".完成此操作后,您将能够font使用此选择器选择您的元素:$(".font")

  • 从技术上讲,选择器`[id ="font"]`可以工作:)我不会建议,但我只是说 (2认同)
  • @Ian是对的.`[id ="font"]`会起作用,因为它是一个属性/属性选择器,虽然它适用于id ...它不是专门为id(唯一标识符)构建的,因此将继续寻找匹配的元素.Ian不会暗示它的原因是因为拥有多个id(至少可以说)是不好的做法. (2认同)