【发布时间】:2019-11-02 00:43:38
【问题描述】:
每当用户单击特定按钮时,我都会通过 jQuery 创建 <li> 元素并将其附加到 DOM。但是,一旦将它们添加到 DOM,它们就会显示为 <li style=""></li>,而不是 <li></li>。为什么会这样?
我知道,从视觉上看,这不会造成问题。但是,当试图在数组中查找特定元素的索引时,它确实会导致问题。
添加<li>元素的函数:
function addNewTask(input) {
let userInput;
userInput = input;
let task = '<li><span class="text-task">' + userInput + '</span><span class="delete-task">x</span></li>';
//parent = $('.task-list');
$('.task-list').append(task).children(':last').hide().fadeIn(250);
arr.push(task);
localStorage.setItem('items', JSON.stringify(arr));
console.log(arr);
}
尝试查找 DOM 元素的数组索引的函数(当前未按预期工作 - 它无法找到指定值的索引):
$(document).ready(function () {
$(document).on('click', '.delete-task', function () { // We use 'on' as the element is dynamically added
console.log("'Delete' button pressed");
var $self = $(this);
var index = this.parentElement.outerHTML;
var findIndex = arr.indexOf(index);
arr.splice(findIndex, 1);
$self.parent().fadeOut(250, function() {
console.log($self.parent().html());
$self.remove(); // Dynamically remove the DOM element from the list
localStorage.setItem('items', JSON.stringify(arr));
console.log(localStorage.getItem('items'));
});
});
});
HTML 预期输出:
<li><span class="text-task">' + userInput + '</span><span class="delete-task">x</span></li>
HTML 实际输出:
<li style=""><span class="text-task">' + userInput + '</span><span class="delete-task">x</span></li>
更新(问题已解决!):
在 .hide() 和 .fadeIn() jQuery 方法执行完毕后,我可以通过删除 style 属性来解决问题。
修改代码:
function addNewTask(input) {
let userInput;
userInput = input;
let task = '<li><span class="text-task">' + userInput + '</span><span class="delete-task">x</span></li>';
arr.push(task);
//parent = $('.task-list');
$('.task-list').append(task).children(':last').hide().fadeIn(250, function() {
console.log(this);
$(this).removeAttr('style');
localStorage.setItem('items', JSON.stringify(arr));
console.log(arr);
});
}
【问题讨论】:
-
可能是因为
.hide()和.fadeIn()添加和删除样式 -
“但是,当尝试在数组中查找特定元素的索引时,它确实会导致问题。” - 为什么/如何?您实际上并没有为此目的比较 HTML 代码 ...?
-
最初您的问题只是要求澄清。您现在的编辑暗示这是一个 X/Y 问题,因为
style属性会以某种方式影响其他逻辑,而实际上它不应该。因此,请将代码添加到演示在数组中查找元素索引的问题的问题中。
标签: javascript jquery html css google-chrome-devtools