個人博客 地址:http://www.wenhaofan.com/article/20180913220425
介紹
在使用jquery.pjax的時候發現加載頁面時不會執行其中的layui以及jquery的初始化方法,包括一些插件的初始化方法。
查看源碼后發現該jquery.pjax替換容器內容時,是將服務器端返回的html轉換為了jquery dom節點然后再執行的替換,但是這樣操作會導致一系列的加載事件不會被觸發,導致例如jquery和layui的初始化方法不會被執行。
於是決定將添加dom節點修改為直接添加html片段。
修改代碼
1.將jquery.pjax.js中311行的 context.html(container.contents)修改為 context.html(data)。
這樣在pjax加載新頁面的時候便會直接將服務器端返回html片段添加進容器。
但是這樣僅處理了新增頁面,而執行回退操作時pjax會從緩存中讀取上一個頁面的內容,同樣pjax在回退上一個頁面的時候依然是以dom節點的方式存儲和添加的,所以我們還需要繼續修改。
2.
將365行的
cachePush(pjax.state.id, [options.container, cloneContents(context)])
修改為
cachePush(pjax.state.id, [options.container, context.html()])
到此修改完成,此時使用pjax加載新頁面的時候,layui jquery等插件的初始化方法即可正確執行。
