Jquery - Как добавить динамические идентификаторы и для текста для соответствующих меток

У меня есть один список элементов с флажками, которые динамически загружаются из серверной части.

Вот HTML-конструктор, который у меня есть в моем браузере.

<ul>
    <li><input type="checkbox" /><label>Details 1</label></li>
    <li><input type="checkbox" /><label>Details 2</label></li>
    <li><input type="checkbox" /><label>Details 3</label></li>
    <li><input type="checkbox" /><label>Details 4</label></li>
    .... and so on
</ul>

Количество списков может быть изменено в любой момент времени в соответствии с динамическим управлением.

Дело в том, что я хочу постепенно добавлять 'ID' для флажков и добавить атрибут 'for' для соответствующего контейнера меток. Само собой разумеется, что то же самое имя идентификатора должно быть применено и к соответствующему атрибуту метки.

Как мне добиться этого с помощью jQuery.

Заранее спасибо.

4 ответа

Решение
var listItems = $('ul li');
listItems.each(function(idx, li) {
    $(this).find('input').attr('id','chkbox'+idx);
    $(this).find('label').attr('for','chkbox'+idx);
});

Я использовал each из jquery, проверьте это независимо от того, какое количество элементов списка можно использовать там.

[1]:

var listItems = $("ul li");
listItems.each(function(idx, li) {
    $(this).find('input').attr('id','chkbox'+idx);
    $(this).find('label').attr('for','chkbox'+idx);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
    <li><input type="checkbox" /><label>Details 1</label></li>
    <li><input type="checkbox" /><label>Details 2</label></li>
    <li><input type="checkbox" /><label>Details 3</label></li>
    <li><input type="checkbox" /><label>Details 4</label></li>
</ul>

Рабочая скрипка

использование

в jquery

var countValueYouSet=1;
    $("ul li ").each(function(){
        $('input').attr('id',countValueYouSet);
        $('label').prop('for',countValueYouSet);

        countValueYouSet++;
    });

Попробуйте следующее.

Найти все ярлыки, которые следуют за input элемент и которые не имеют for атрибут, затем создайте идентификатор и назначьте его for атрибут и id предыдущего элемента (input).

$('input + label:not([for])').each(function(index, item){
   var id = 'checkbox-' + index,
       label = $(this);
   label.prop('for', id )
        .prev().prop('id', id);
});

$('input + label:not([for])').each(function(index, item){
  
  var id = 'checkbox-' + index,
      label = $(this);
  
  label.prop('for', id )
       .prev().prop('id', id);
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<ul>
    <li><input type="checkbox" /><label>Details 1</label></li>
    <li><input type="checkbox" /><label>Details 2</label></li>
    <li><input type="checkbox" /><label>Details 3</label></li>
    <li><input type="checkbox" /><label>Details 4</label></li>
</ul>

Есть два очевидных варианта, первый - добавить id а также for:

$('input').prop('id', function(i) {
  var id = 'input' + i;
  $(this).next('label').attr('for', id);
  return id;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li>
    <input type="checkbox" />
    <label>Details 1</label>
  </li>
  <li>
    <input type="checkbox" />
    <label>Details 2</label>
  </li>
  <li>
    <input type="checkbox" />
    <label>Details 3</label>
  </li>
  <li>
    <input type="checkbox" />
    <label>Details 4</label>
  </li>
</ul>

Во-вторых, просто переместить input внутри label:

$('input').each(function() {
  $(this).prependTo(this.nextElementSibling);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li>
    <input type="checkbox" />
    <label>Details 1</label>
  </li>
  <li>
    <input type="checkbox" />
    <label>Details 2</label>
  </li>
  <li>
    <input type="checkbox" />
    <label>Details 3</label>
  </li>
  <li>
    <input type="checkbox" />
    <label>Details 4</label>
  </li>
</ul>

Рекомендации:

  • JavaScript:
    • node.nextElementSibling,
  • JQuery:
    • attr(),
    • next(),
    • prependTo(),
    • prop(),
Другие вопросы по тегам