jquery .clone() против атрибутов id и name

#jquery

#jquery

Вопрос:

Я прочитал ряд вопросов и ответов в этой области, но ни один из них, похоже, не касается сути (или картофелины) рассматриваемой проблемы.

Если вы укажете .clone() на элемент с идентификатором и / или именем, с дочерними элементами с идентификаторами и / или именами, что вы получите? Элементы без идентификатора или имени? Элементы, которые нарушают правила dom, дублируя идентификаторы?

Ответ №1:

Вызов .clone() сам по себе не нарушает ни одного из правил DOM ( .clone() это просто вызов функции, результаты существуют в памяти).

Однако вставка результатов .clone() вызова в DOM приведет к тому, что в документе будут существовать два элемента с одинаковым id значением (что, как вы указали, недопустимо).

Ответ №2:

В других ответах это хорошо подытожено, но вот метод удаления id атрибутов в новом клоне…

 clone.find('[id]').removeAttr('id');
  

В качестве альтернативы, если вы хотите добавить строку к их id атрибутам…

 clone.find('[id]').attr('id', function(index, oldId) { return oldId   'cloned'; });
  

Ответ №3:

Клонированные элементы еще не вставлены в DOM. Они существуют только в памяти и как таковые не нарушают никаких спецификаций. Это мое понимание.

Ответ №4:

Несколько элементов могут иметь одинаковый размер name , так что это не проблема.

Вызов clone элемента сам по себе не нарушает правило DOM об уникальных идентификаторах. Это потому, что клона элемента в данный момент нет в документе. Правило нарушается только тогда, когда вы его вставляете.