背景
在做一個地圖功能读跷,需要能引入其他的地圖來操作啊掏,之前用高德特方便蠢络,百度的接口感覺也很好寫,寫到一半被告知要全部改成另一個公司的地圖迟蜜,無接口刹孔,自己瞅。
他們的地圖引入了1.8.2的jQuery娜睛,本身系統(tǒng)的布局頁中引入的版本是3.1.1髓霞。開始沒有意識到是版本沖突,出現(xiàn)的錯誤一直是對應的marker畫不上去(用的Chrome瀏覽器)但是F12打開調試面板的時候就能顯示了畦戒,我現(xiàn)在還不知道是為什么方库。可能和版本沖突有關吧障斋。
remove
我用puer單獨發(fā)布了地圖纵潦,相同的功能,可以實現(xiàn)垃环。
刪掉了布局頁的引入邀层,marker的顯示、添加都沒有問題晴裹,應該就是沖突咯被济。所以咋辦呢?
我開始天真的想到涧团,我直接把高版本刪掉不就好了嗎只磷,謎一樣奇怪的思維经磅,想直接$.remove();掉,以為沒問題了钮追。
中間本來想在選擇器中用正則去匹配版本號格式预厌,失敗告終,最后用的src*來包含固定了版本號的jQuery(ps:因為文件名為jQuery-3.1.1.js這樣)元媚,src^和src$分別能匹配前后轧叽,不過嘗試里面寫正則失敗。jQuery選擇器文檔
remove掉以后發(fā)現(xiàn)3.1.1是已經(jīng)加載到內存去了的刊棕,你把引入的鏈接刪掉有什么用呢炭晒,愚蠢。有沒有辦法甥角?在stackoverflow里面也有人聊這個网严,反正就是你刪不掉的啦,除非用delete關鍵字嗤无,當然是非常不推薦的啦震束,我覺得我最近都在干些秀下限的事兒。嗯当犯,好垢村,那怎么辦?你要上天了嚎卫。
jQuery.noConflict()
版本沖突之前也嘗試過jQuery.noConflict()嘉栓,因為除了他們的沖突,同頁面還有個jQuery.autoComplete用來做補全驰凛,作者說能兼容到1.7以上胸懈,比bootstrap好,當前用的bootstrap版本只能兼容到1.9.2還是多少恰响,意思就是拋棄IE咯趣钱,他們用的這個jQuery版本還真是尷尬。
頁面中引用的高版本在前胚宦,低版本在后首有。除外還引了autoComplete。直接這樣$("").autoComplete會一直報is not a function枢劝。
所以用了匿名函數(shù)用閉包畫了個圈井联,里面var $ = jQuery.noConflict();,這樣閉包里面的$就變成了高版本您旁。不知道我當時咋想的烙常,其實按高在前低在后,最后autoComplete最后肯定綁到了低版本上,但是加了這個后在閉包外面引用autoComplete不會報錯蚕脏,但是也不生效侦副,真的是很尷尬。
因為當前頁面用了bootstrap的modal彈窗驼鞭,而且也是布局頁中引入的秦驯,所以丟不掉。所以換了個頁面引入挣棕,不顯示marker依然存在译隘,autoComplete倒是生效了。
當時加autoComplete是考慮用戶體驗洛心,估計最后為了地圖要放棄吧固耘,現(xiàn)在還是沒能找到解決marker問題的方法。
刪掉任意一個引用
刪高版本
這是最愚蠢的嘗試了词身,出了一堆錯誤玻驻,看到Bootstrap要求1.9.2的時候就放棄這個愚蠢的想法了。
刪低版本
marker不顯示不顯示就是不顯示偿枕。
以上2017.1.17 折騰兩天了,沒結果户辫,繼續(xù)加油渐夸。