Я использую объект для addClass, добавляю текст и удаляю li. Я хочу, чтобы мой объектный формат, и моя функция хороша, или это может быть сделано с лучшим кодом. Также я разделяю класс и текст с помощью запятой. В моем объявлении второго объекта я не добавляю текст, поэтому я хочу знать, какой ключ не содержит свойства text. Последнее, что он не удаляет последнюю ли. играть на скрипке
JQuery
function updateli(x) {
$.each(x, function (val, key) {
if (Array.isArray(key)) {
$.each(key, function (i, val) {
$('li').eq(val).remove()
})
}
$('li').eq(val - 1).addClass(key.split(',')[0]).text(key.split(',')[1])
})
}
$(function () {
var ob = {
2: 'bggreen, hiii',
3: 'bgblack',
remove: [0, 3]
}
updateli(ob)
})
HTML
<ul>
<li>to be remove</li>
<li></li>
<li></li>
<li>to be remove</li>
</ul>
вы можете использовать объект вместо "," разделения и затем сплит... проблема с удалением заключается в том, что вы сначала удаляете [0], но тогда индекс li не находится в одной и той же позиции, поэтому [ 3] уже не сейчас [2]...
function updateli(x) {
$.each(x, function(key, val) {
if (Array.isArray(val)) {
var $lis = $("li");
for (var i = $lis.length - 1; i >= 0; i--) {
if (val.indexOf(i) > -1)
$lis.eq(i).remove();
}
} else {
$('li').eq(key).addClass(val.class).text(val.text)
}
})
}
$(function() {
var ob = {1: {class: "myClass", text: "myText"}, 3: {class: "myClass"}, remove: [0, 3]}
updateli(ob)
});
здесь скрипка
вы можете сохранить результат сплита как это
$.each(x, function (val, key) {
if (Array.isArray(key)) {
$.each(key, function (i, val) {
$('li').eq(val).remove()
})
}
var keys = key.split(',');
var $li = $('li').eq(val - 1).addClass(keys[0]);
if(keys.length > 1){
$li.text(keys[1])
}
})