为了账号安全,请及时绑定邮箱和手机立即绑定

appendTo li:last问题

<!DOCTYPE html>

<html>


<head>

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

    <title></title>

    <style>

    .left {

        width: auto;

        height: 150px;

    }

    

    .left div {

        width: 150px;

        height: 120px;

        padding: 5px;

        margin: 5px;

        float: left;

        background: #bbffaa;

        border: 1px solid #ccc;

    }

    </style>

    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>

</head>


<body>

    <h2>add方法()</h2>

    <div class="left first-div">

        <div class="div">

            <ul>

                <li>list item 1</li>

                <li>list item 2</li>

                <li>list item 3</li>

            </ul>

            <p>新的p元素</p>

        </div>

    </div>

    <div class="right"></div>

    <br/>

    <button>点击:add传递元素标签</button>

    <button>点击:add传递html结构</button>

    <script type="text/javascript">

    $("button:first").click(function() {

         //把p元素添加到li的合集中

         //$('li').add('p').css('background', 'red')

         $('li').add('<li>list item 4</li>').appendTo($('li:last'))

    })

    </script>

    <script type="text/javascript">

    $("button:last").click(function() {

         //把html结构'<p>新的p元素</p>'

         //加入到li的合集中,为了能够在页面上显示

         //需要再重新appendTo到指定的节点处

         //值得注意:整个结构位置都改变了

         $('li').add('<p>新的p元素</p>').appendTo($('.right'))

    })

    </script>

</body>


</html>

运行第一次是

http://img1.sycdn.imooc.com//59703d2e0001e4a602130147.jpg

http://img1.sycdn.imooc.com//59703d2e0001d9b501860269.jpg

运行第二次是

http://img1.sycdn.imooc.com//59703d410001fefe01900294.jpg

http://img1.sycdn.imooc.com//59703d4100015c3f01900102.jpg

哪位大神可以帮忙解释一下这是为什么呀


正在回答

4 回答

你语句后面加个;号结束语句就行了,老师那个错误示范- -

0 回复 有任何疑惑可以回复我~
#1

我要SSR

虽然案例中没发生错误,但是你一改问题就呈现出来了。所以要注意这些细节
2017-07-21 回复 有任何疑惑可以回复我~
#2

qq_与陌Dance_0 提问者

加了分号结果一样啊
2017-07-21 回复 有任何疑惑可以回复我~
#3

我要SSR 回复 qq_与陌Dance_0 提问者

把你的代码复制下来跑了一边,刚了解清楚这是怎么回事,你在li集合中添加一个HTML元素这里没问题,但是你在最后一个li元素中插入就有问题了,因为add()返回的是新的jquery对象,但这个新的jquery对象里又包括了最后一个li元素,其实这里就应该算错了,appendTo()方法中,如果插入的内容是已存在的元素,它将从当前位置被移除,并在被选元素的结尾被插入。但是这里没有被移除,被你硬生生插入进去,这里都发生了错误,然后第二次插入的时候他就找不到指定点插入节点。
2017-07-24 回复 有任何疑惑可以回复我~
#4

qq_与陌Dance_0 提问者 回复 我要SSR

大概了解了
2017-07-25 回复 有任何疑惑可以回复我~
查看1条回复

第一次点击可以理解了、第二次还是理解不来

0 回复 有任何疑惑可以回复我~

运行第一次是http://img1.sycdn.imooc.com//59703c9d0001d9b501860269.jpghttp://img1.sycdn.imooc.com//59703cba0001e4a602130147.jpg

运行第二次是

http://img1.sycdn.imooc.com//59703cfc0001fefe01900294.jpghttp://img1.sycdn.imooc.com//59703cfd00015c3f01900102.jpg

哪位大神可以帮忙解释一下这是为什么呀


0 回复 有任何疑惑可以回复我~
#1

Kayber

应该是先获取到li集合,然后往这个li集合里面添加p,但是这个p并不会显示,这样便用appendTo把这个集合移动到div.right里面(因为appendTo是动态添加p继而显示p),注意是移动,不是复制,就相当于剪切操作,所以ul里面没有东西了。
2017-07-20 回复 有任何疑惑可以回复我~
#2

qq_与陌Dance_0 提问者 回复 Kayber

我触发的事件是$('li').add('<li>list item 4</li>').appendTo($('li:last')),没有div.right,大哥你是不是看错了
2017-07-21 回复 有任何疑惑可以回复我~
#3

Kayber 回复 qq_与陌Dance_0 提问者

你说的不是第一个按钮事件嘛,我说的是第二个,,,第一个也好理解啊,先获取到li集合,然后再往这个集合里面添加一个li,然后再把这个集合移动到最后一个li标签也就是li3里面。
2017-07-21 回复 有任何疑惑可以回复我~
#4

qq_与陌Dance_0 提问者 回复 Kayber

可是第二次点击的时候就出现问题了
2017-07-21 回复 有任何疑惑可以回复我~
#5

Kayber 回复 qq_与陌Dance_0 提问者

Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child element contains the parent.这句代码就是你说的第二次点击出错,意思是:捕获DOM对象异常:执行往最后的li添加节点失败:新的子元素包含了父元素。。。怎么说呢,应该就是逻辑出错了,新的子元素怎么能包含父元素呢。
2017-07-21 回复 有任何疑惑可以回复我~
#6

qq_与陌Dance_0 提问者 回复 Kayber

后面我看了一下感觉应该就是这个异常、然后就直接什么都没添加进去、直接清空了、但是我不清楚为什么包含了父元素、逻辑也确实有点乱。。
2017-07-24 回复 有任何疑惑可以回复我~
#7

Kayber 回复 qq_与陌Dance_0 提问者

你点击第一次,li中都包含了三个li,然后点击第二次,到底是往父级的那个li还是父级li里面的li:last添加新的集合,应该是这个问题,,,有点儿乱。但是一般都是点击第一次然后注销按钮了吧。
2017-07-24 回复 有任何疑惑可以回复我~
#8

qq_与陌Dance_0 提问者 回复 Kayber

好的、谢谢了、刚学一段时间js和jQuery还不是很熟练,谢谢解惑、
2017-07-24 回复 有任何疑惑可以回复我~
查看5条回复

举报

0/150
提交
取消

appendTo li:last问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信