Я хочу дать увеличивающийся идентификатор новым элементам 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
С учетом в 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')
).
я только что изменил ваш код, я надеюсь, что это может помочь вам, пожалуйста, проверьте
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);
}
Я немного изменил код для ясности (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"
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);
id
будет сгенерирован для всех li
. Чтобы проверить, проверьте li, которые недавно сгенерированы.