jQuery Nestable2 使用總結


最近,因為公司的一個新項目,用了一個基於bootstrap二次改造的國外友人的框架。感覺很一般吧,要求更換框架,客戶拒絕。只能搞這個,發現里面一個jQuery插件-【Nestable】但是源作者長時間不更新,后來發現了一個新版本,應該是另外一個人基於Nestable改造的,稱之為“Nestable2”,所以也就花了一些時間研究了一下,使用百度找的資料都很淺薄,所以這里做一個匯總,也希望更多的人少走彎路吧。雖然說這個插件用的人不多。

項目地址

GitHub

疑難點匯總

1.Nestable 初始化折疊

在Nestable 2中,初始化折疊跟Nestable 原始版本中一致,但是百度搜索的結果很少,我覺得應該是這個插件很少人用吧,因為比這個好看的插件多了去。

// 展開指定內存塊中的元素  
$(selector).nestable('expandAll'); 
// 收合指定內存塊中的元素  
$(selector).nestable('collapseAll');

2.Nestable 禁止拖動

禁止拖動在Nestable原始版本中是沒有這一功能的,因為這個插件就是可拖拽的,拖拽完成后,把數據再傳遞給后台進行修改。這個我找了很久都沒有一個好點的解決方案,在CSDN上博主說,直接刪除插件底層代碼就可以實現,但是怕有問題,所以找到新的插件,也就是版本2。來看代碼。

$('selector').nestable({
        'onDragStart': function (l, e) {
            return false;
        }
});

這個地方,如果把 return false刪除,就可以寫用戶拖動元素時,觸發作為選項提供的回調函數。l是主容器,e是已移動的。需要這個功能的,可以查看GitHub上的介紹。

3.Nestable 點擊事件

這個是我在平安夜當晚研究到11多,都沒解決的問題,今天偶然性發現了問題,原因是JS的事件冒泡造成的,同時,非常感謝Google的幫助哈。

Nestable 2比原版更加擴展,直接使用JSON數據渲染到頁面上,但是沒有額外的點擊事件,這就需要自己操作了,所以就用類作為點擊。

$('.dd-item').click(function () {
      var id = $(this).data('id');
      alert(id);
});

但是這個地方出問題了。點擊第一級數據正常,第二級數據后,獲取到了兩個id,一個是父級id,一個是點擊的id,再繼續測試,三級的話,會彈出三個數據。經過百度的一段探索后,發現可以使用jQuery 事件one()方法,但是只能點擊一次,第二次點擊就無法使用了,這不是一個有效的方法。

然后再者就是使用防止冒泡的方法:前端博客

w3c的方法是e.stopPropagation(),IE則是使用e.cancelBubble = true

試了試,沒有效果。那就拼接html,單獨給li標簽寫一個onclick方法依舊是原本的小bug。

分析了一下渲染的界面。發現生成的里面嵌套了一個div,如果給這個div加一個點擊事件,會不會能夠實現單擊的效果呢?

$('.dd-handle').click(function () {
     var p = $(this).parent();
     var id = p.data('id')
     alert(id);
});

果然,這個驗證了我的猜想,給渲染的子級元素點擊事件,找到父級ID就不會出現冒泡問題了。哈哈完美解決。

總結

Nestable2基於Nestable一個升級版,添加了很多功能,雖然去年不再更新,但是這個插件依舊很強大。希望這個文檔能夠給一些帶來一點幫助吧。

本文首發於:https://qsh5.cn/post-70.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM