Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要使用带嵌套元素的.not()选择器的帮助吗_Javascript_Jquery_Html - Fatal编程技术网

Javascript 需要使用带嵌套元素的.not()选择器的帮助吗

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

我正在尝试克隆一个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 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。

感谢您的回复。但我想你误解了我的问题。我想选择整个
  • 元素,但不选择li元素中的仅从克隆的元素中删除span