Увеличение идентификатора новых элементов <li>, созданных только упорядоченным списком <ol>

0

Я хочу дать увеличивающийся идентификатор новым элементам li, которые автоматически создаются списком ol

<div id="txtarea" contenteditable="true">Some text</div>
var html2 = "<div class='steps'><ol><li class='personid' id=''><a href='url-here'>Link Text </a></li></ol><div>";
$("#txtarea").html(html2);

Примечание. Элементы li должны быть автоматически скопированы списком ol, а не вручную (по циклу или для цикла while)

Вот js fiddle.Please сначала создайте новый элемент li в jsfiddle.New элемент будет автоматически создан из-за ol.Then uyou увидит. Идентификатор обоих li будет таким же

http://jsfiddle.net/younis764/rWcKu/4/

Я хочу увеличить идентификатор каждого нового элемента li, автоматически созданного ol list.Plz help

  • 1
    Что вы имеете в виду: «Мой список редактируемый, нажмите Enter, чтобы создать новые элементы».
  • 0
    Обновлено: stackoverflow.com/a/20259055/1636522 , ни dom-запросов, ни циклов.
Теги:
html-lists

4 ответа

2
Лучший ответ

С учетом в contenteditable: http://jsfiddle.net/rWcKu/10/ (обновлено от ред 9)

Та же идея, что и ниже, за исключением того, что она выполняется на существующем элементе в DOMNodeInserted событий DOMNodeInserted.

document.addEventListener("DOMNodeInserted", function(event){
  var element = event.target;
  if (element.tagName == 'LI') {
    var $el = $(element);
    var maxId = 0;
    $el.siblings().each( function() {
        var id = $(this).attr('id');
        if ( id > maxId ) {
            maxId = id;
        }
    });
    $el.attr('id',++maxId);
  }
});

здесь обновленная скрипка: http://jsfiddle.net/rWcKu/8/

Идея состоит в том, чтобы получить последний идентификатор li, проанализировать как int и increment. Также используйте предыдущий li в качестве шаблона и просто замените его содержимое (.clone(true)) - его классы, события, данные и т.д. Также будут клонированы. Затем поместите новое содержимое (заменив первоначально клонированный).

Наконец, заверните его в вызов функции, где вы передаете html, который хотите вставить. Это можно было бы назвать вручную, внутри обработчика события или в каком-то цикле... ура!

Здесь говядина:

function addLi(newHtml) {
    var $lastLi = $('#txtarea ol li').last();
    var lastId = $lastLi.attr('id')||0;
    var $clone = $lastLi.clone(true);
    $clone.attr('id',++lastId).html(newHtml);
    $lastLi.after($clone);
}

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

addLi('<a href="#">Link text 2</a>');
addLi('<a href="#">Link text 3</a>');

Предполагается, что хотя бы один li существует и что атрибут id является числовым (не смешанным типом, хотя это может быть ретро-оснащено небольшим .attr('id')).

  • 1
    создайте новый li, нажав Enter, и вы увидите, что идентификатор будет таким же
  • 0
    @ user1452376 полностью пропустил спорную часть ... :(
Показать ещё 6 комментариев
0

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

var html2 = "<div class='steps ' ><ol ><li class='personid'  id='' ><a href='url-here' >Link Text </a></li></ol><div>";
$("#txtarea").html(html2);
var html2 = "<div class='steps ' ><ol ></ol><div>";
for(i=1;i<10;i++)
{
    var newli="<li id='"+i+"' >link text"+i+"</li>";
    $("#txtarea .steps ol").append(newli);
}
0

Я немного изменил код для ясности (http://jsfiddle.net/wared/fsQZ2/):

var uid = function (uid) {
    return function () {
        return 'item-' + (++uid);
    };
}(0);

document.addEventListener('DOMNodeInserted', function(event){
    var el = event.target;
    if ((el.tagName + '').toLowerCase() === 'li') {
        el.setAttribute('id', uid());
    }
});

$('#txtarea').html(
    '<ol><li id="' + uid() + '">Some text</li></ol>'
);

uid() возвращает идентификатор с номером, увеличивающимся при каждом вызове:

uid(); // "item-1"
uid(); // "item-2"
0
var i=0;// set your value 

var html2 = "<div class='steps ' ><ol ><li class='personid'  id='"+(++i)+"' ><a href='url-here' >Link Text </a></li></ol><div>";

$("#txtarea").html(html2);

демонстрация

  • 0
    Этот подход неверен и не будет работать. Всякий раз, когда новый узел создается снова, значение i будет инициализироваться обратно в 0. Таким образом, один и тот же id будет сгенерирован для всех li . Чтобы проверить, проверьте li, которые недавно сгенерированы.
  • 0
    Пожалуйста, проверьте в журнале консоли, id элементов li все еще sAME.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню