Javascript 需要使用带嵌套元素的.not()选择器的帮助吗
我正在尝试克隆一个li元素,但没有标记。 我已经尝试了很多不同的方法,但我可以让它看起来有效 当我查看li元素的html时,它仍然选择span标记 下面是我正在使用的代码。任何帮助都将不胜感激。谢谢Javascript 需要使用带嵌套元素的.not()选择器的帮助吗,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试克隆一个li元素,但没有标记。 我已经尝试了很多不同的方法,但我可以让它看起来有效 当我查看li元素的html时,它仍然选择span标记 下面是我正在使用的代码。任何帮助都将不胜感激。谢谢 <ul class="todo_list_items" data-category_id="44"> <li class="tasks" data-task_id="30"> <!-- Don't want to select this span
<ul class="todo_list_items" data-category_id="44">
<li class="tasks" data-task_id="30">
<!-- Don't want to select this span class -->
<span class="modify_tasks">
<a href='#' class='delete_task_name'>Delete</a>
<a href='#' class='edit_task_name'>Edit Task</a>
</span>
<a href="http://localhost/GuruCoders/projcollab/taskdiscussions/index/30/44">Test</a>
</li>
</ul>
<script>
$(document).on("click", ".edit_task_name", function () {
var task_id = $(this).data("task_id");
var previous = $(".tasks[data-task_id=30]").not(".tasks[data-task_id=30] > span").clone();
console.log(previous.html());
});
</script>
-
$(文档)。在(“单击“,”。编辑任务名称”,函数(){
var task_id=$(this).data(“task_id”);
var previous=$(“.tasks[data-task\u id=30]”)。而不是(“.tasks[data-task\u id=30]>span”).clone();
log(previous.html());
});
只需克隆它,然后清空它:
var previous = $(".tasks[data-task_id=30]").clone().empty();
编辑:如果只想删除范围而不想删除其他内容,则只需从克隆中删除范围:
var previous = $(".tasks[data-task_id=30]").clone();
previous.children("span").remove();
not()将检查集合中的元素,在您的情况下,集合仅由$(“.tasks[data-task_id=30]”组成。not()正在测试它内部的跨度,以查看它是否匹配自己的父对象,因此not不会调整jQuery对象以在那里进行克隆。实现所需的另一种方法可能是类似以下代码:
var $tasks = $(".tasks[data-task_id=30]"),
$modifyTasks = $tasks.children('span').detach(),
$cloneOfTasks = $tasks.clone();
$modifyTasks.prependTo($tasks);
$cloneOfTasks.appendTo($tasks.parent());
.detach()在不丢失事件和数据的情况下删除范围,以便在完成克隆后将其放回
或者,此代码可能更易于解释和使用:
var $tasks = $(".tasks[data-task_id=30]");
$('ul.todo_list_items').append($tasks.contents().not('span').clone().wrap('<li class="tasks" data-task_id="30">').closest('li'));
var$tasks=$(“.tasks[data-task\u id=30]”);
$('ul.todo_list_items')。追加($tasks.contents().not('span')。clone().wrap('li class=“tasks”data-task_id=“30”>)。最近('li'));
它使用.contents()获取任务中的内容,这样您就可以不针对任务运行。需要最接近的('li')部分,以确保新元素周围的li被返回以附加到ul。感谢您的回复。但我想你误解了我的问题。我想选择整个