Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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更改ID是一种好的做法吗?_Javascript_Html_Css - Fatal编程技术网

如果元素是唯一的,那么使用javascript更改ID是一种好的做法吗?

如果元素是唯一的,那么使用javascript更改ID是一种好的做法吗?,javascript,html,css,Javascript,Html,Css,我有一个无序列表,其中我使用一个ID来标识上次单击的当前列表项。单击其他项目时,我使用js将id切换到列表中的其他项目,以便应用样式 在我看来,一个唯一的、只能使用一次的项目(一个选定的li项目)应该被标识为ID,这是我这么做的原因,但有人告诉我这样做是不好的做法 由于您可能需要在将来的某个时间点引用元素的特定id,因此更改它可能不是一个好主意。在您的情况下,最好只对最后单击的项目应用一个类。我不会这样做。这似乎是您发现的一个机会,您可以将其用于CSS样式(使用属性选择器)和JS使用(使用dat

我有一个无序列表,其中我使用一个ID来标识上次单击的当前列表项。单击其他项目时,我使用js将id切换到列表中的其他项目,以便应用样式


在我看来,一个唯一的、只能使用一次的项目(一个选定的li项目)应该被标识为ID,这是我这么做的原因,但有人告诉我这样做是不好的做法

由于您可能需要在将来的某个时间点引用元素的特定id,因此更改它可能不是一个好主意。在您的情况下,最好只对最后单击的项目应用一个类。

我不会这样做。这似乎是您发现的一个机会,您可以将其用于CSS样式(使用属性选择器)和JS使用(使用
dataset
或jQuery的
.data()
方法)。 :

HTML5的设计考虑到了数据的可扩展性 与特定元素关联,但不需要定义任何 意思data-*属性允许我们在上存储额外信息 标准的语义HTML元素,没有其他缺陷,例如 类列表、非标准属性、DOM上的额外属性或 setUserData

在HTML端:

<!-- You can use data without value, and just test its presence -->
<li data-selected> 
    ...
</li>

你的问题实际上有几个有趣的部分,让我尽量回答它们:-)

  • “如果元素是唯一的,那么使用javascript更改ID是否可以?”
  • 您可以说这是一个合理的情况,如果元素真的是唯一的,那么使用JavaScript“移动”ID并没有真正的危害

    但是

    在你的描述中,你提到了一些更基本的东西:

  • 单击其他项目时,我使用js将id切换到列表中的其他项目,以便应用样式
  • 如果是这种情况(更改样式的ID),那么我建议改用类。人们之前已经给了你一个很好的提示,像“是活动的”类会非常有用,因为它没有ID那么具体,如果需要,可以在多个项目上使用,如果你使用确定状态的类(如“是活动的”、“有子项”、“正在动画制作”等),在代码的后面部分也可以很容易地重用它们,并且很清楚元素目前正在做什么

    一点代码供参考:

    HTML

    <ul>
      <li>Some item</li>
      <li class="is-active">Some item</li>
      <li>Some item</li>
      <li>Some item</li>
    </ul>
    
    jQuery

    // You probably want a bit more specific selector, but it's just an example.
    $('li').on('click', function() {
    
      var $element = $(this),
          $elements = $('li');
    
      if (!$element.hasClass('is-active')) {
        $elements.removeClass('is-active');
        $element.addClass('is-active');
      }
    
    });
    

    您是否也从以前选择的元素中删除id?我是否更喜欢使用类名称,如
    单击的
    。。。如果你以后想在另一个列表或项目上应用该功能,ID可能是个问题。对我来说,问题似乎是:我应该使用ID进行样式设置吗?答案是:应用一个类。如果一个ID可以在不同的时间引用不同的元素,那么它就不会引用唯一的元素,也不是真正的ID。同样,你可以使用我的驾驶执照,但你会很淘气。是的,我删除了ID。。。然后将其添加到另一个项目中。这也是一个有效的方法,例如,如果您正在构建一个应用程序,它可能会非常有用。
    $elements.toggleClass('is-active',false.)。filter($element)。toggleClass('is-active',true).is-active {
      color: #eee;
      background-color: #222;
    }
    
    // You probably want a bit more specific selector, but it's just an example.
    $('li').on('click', function() {
    
      var $element = $(this),
          $elements = $('li');
    
      if (!$element.hasClass('is-active')) {
        $elements.removeClass('is-active');
        $element.addClass('is-active');
      }
    
    });