javascript, как петля идентификатор для всех строк, выводится из sql db [duplicate]

Раньше я использовал инструмент с открытым исходным кодом, названный HTMLParser . Он разработан, чтобы анализировать HTML по-разному и хорошо служит цели. Он может анализировать HTML как другой treenode, и вы можете легко использовать его API для получения атрибутов из узла. Проверьте это и посмотрите, поможет ли это вам.

-1
задан Exposian 24 January 2017 в 16:15
поделиться

5 ответов

Большинство этих ответов являются лишь частично правильными.

Чтобы ваша разметка была действительной, идентификаторы должны быть уникальными. Однако иногда неосторожные разработчики повторно используют один и тот же идентификатор в DOM. Не бойтесь, это еще не конец света, вы все равно можете получить доступ к нескольким элементам с тем же идентификатором, что и вы, используя классы.

document.querySelectorAll('#vid'); 

Вернет элемент HTMLCollection (массив, подобный объекту) с тем же идентификатором.

0
ответ дан Daniel Lane 17 August 2018 в 10:38
поделиться
  • 1
    ЗДОРОВО. Это сделало трюк! Еще раз спасибо! – Exposian 24 January 2017 в 16:27
  • 2
    Это плохая практика, и ее не следует поощрять. Этот ответ - всего лишь полоса – j08691 24 January 2017 в 16:35
  • 3
    @ j08691 Это абсолютно ужасная практика. Я не рекомендую это как нечто, что ДОЛЖНО быть сделано. Я отмечаю, что это недопустимый HTML, а жирным шрифтам нужно быть уникальным. – Daniel Lane 24 January 2017 в 17:32

Использование одного и того же идентификатора более чем некорректно разметки, а когда getElementById возвращает только один элемент, он возвращает первый, с которым он сталкивается.

Однако, если вы не можете изменить разметки с использованием существующего сценария точно так же, как вы можете использовать querySelectorAll для выбора всего элемента с тем же значением атрибута id.

var videos = document.querySelectorAll('[id="vid"]')

for (var i = 0; i < videos.length; i++) {
    videos[i].addEventListener('ended', function() {
        // Reset the video to 
        video.currentTime = 0;
        // And play again
        video.load();
    });
}

Однако, если вы можете используйте другие средства для идентификации элементов, таких как атрибуты данных или классы.

Лично я склоняюсь к атрибутам данных для функционального использования и оставляю классы для использования CSS.

Таким образом, их использует исключение для посещения, а пользовательские интерфейсы, изменяющие классы / css, не будут влиять на ваш функциональный код, поскольку они не должны изменять атрибуты и наоборот.

0
ответ дан Nope 17 August 2018 в 10:38
поделиться

Атрибут id должен быть уникальным, иначе всегда выбирается только первый. Поэтому используйте class для группы элементов и перебирайте их для присоединения обработчика события.

<script>
  var video = document.getElementsByClassName('vid');
  // convert the element collection to array using Array.from()
  // for older browser use `[].slice.call()` for converting into array
  // and iterate over the elements to attach listener
  Array.from(video).forEach(function(v) {
    v.addEventListener('ended', function() {
      v.currentTime = 0; // or use `this` to refer the element
      v.load();
    });
  })
</script>
1
ответ дан Pranav C Balan 17 August 2018 в 10:38
поделиться
  • 1
    FYI: Array.from не поддерживается в IE. Таким образом, либо требуется polyfill, либо цикл for. – epascarello 24 January 2017 в 16:17
  • 2
    @epascarello: добавлена ​​альтернатива в комментарии – Pranav C Balan 24 January 2017 в 16:18
  • 3
    Кажется, что не работает, когда я использую имя класса. – Exposian 24 January 2017 в 16:18
  • 4
    @epascarello: oh, IE ... он поддерживается в Edge, по-видимому ( ref ); и прокладка так же проста, как Array.prototype.slice.call(...), поэтому на самом деле это не огромная проблема. – David Thomas 24 January 2017 в 16:18
  • 5
    FYI: typo getElementsByClassname должно быть getElementsByClassName – epascarello 24 January 2017 в 16:24

Id должен быть уникальным. Вместо этого вы должны использовать class, а затем использовать document.getElementsByClassName('className');

var video = document.getElementsByClassName('vid');
var myFunction = function() {
    // Reset the video to 
    this.currentTime = 0;
    // And play again
    this.load();
};

for (var i = 0; i < video.length; i++) {
    video[i].addEventListener('ended', myFunction, false);
}
5
ответ дан Shubham Khatri 17 August 2018 в 10:38
поделиться
  • 1
    @epascarello Да, я понял, что я отредактировал код для цикла для отдельных элементов, сделал ошибку раньше – Shubham Khatri 24 January 2017 в 16:22

Идентификаторы могут использоваться только один раз в документе, и они должны быть уникальными. Вместо этого вы создаете класс, а затем нацеливаете этот класс и запускаете функцию для каждого элемента с этим классом.

Пример дайте им класс = "vid"

<script>

var videos = document.getElementsByClassName('vid');
// When the 'ended' event fires


for (var i = 0; i < videos.length; i++) {
    videos[i].addEventListener('ended', function(){
    // Reset the video to 
    videos[i].currentTime = 0;
    // And play again
    videos[i].load();
   });
}

</script>

Я не уверен, что этот точный код работает с добавлением слушателя событий, но концепция правильная.

0
ответ дан The Truth 17 August 2018 в 10:38
поделиться
  • 1
    Спасибо, давая видео, класс по-прежнему не работает ... – Exposian 24 January 2017 в 16:24
Другие вопросы по тегам:

Похожие вопросы: