轉載請註明出處: https://home.cnblogs.com/u/zhiyong-ITNote/ 修改一個已有的項目,主要是前端方面,一般的項目後端都是處理好了的,不需要改也不能改,除非特殊需求。然後就遇到了牛逼的代碼。本來看別人已有的代碼做開發就是一件很頭疼的事,一個函數一個方法一個屬性的找 ...
轉載請註明出處: https://home.cnblogs.com/u/zhiyong-ITNote/
修改一個已有的項目,主要是前端方面,一般的項目後端都是處理好了的,不需要改也不能改,除非特殊需求。然後就遇到了牛逼的代碼。本來看別人已有的代碼做開發就是一件很頭疼的事,一個函數一個方法一個屬性的找,眼睛疼....然後今天改代碼還特別頭疼,大概說說:
首先不能使用jquery-ui的自動補全插件,換句說話,所有的第三方模糊匹配/自動補全插件都不能用,但是給我懵的。ajax將請求post到C#後端隨後獲取數據,傳到前端之後,一大串的數據,需要你在一個文本框中邊檢索邊做模糊匹配,本來很好解決的一個事,直接使用jquery-ui的autocomplete就行,但是不行,就不讓,我有啥辦法,然後就自己想轍解決問題。沒有特定的環境,我們就不會有對應的解決方法,更不會嘗試去解決,最後解決它。我的方法是,監聽input標簽的寫入事件,然後獲取寫入的值,將值與從後臺獲取到的數據進行匹配,匹配成功,再動態生成div以下拉列表的形式填充到輸入框下麵。但是遇到個問題,input框檢索的是Name欄位,不是一個字元串而是字元,就是我們的string類型——"hello world"之類的。那麼應該怎麼解決呢?我想到了數據結構書上的字元串匹配演算法KMP,於是查了下jquery的匹配方法,果然有一個match,這就可以給我們解決問題了。通過這兩個解決方案就可自定義的創建自動補全了。
還有一個問題,那就是input標簽的placeholder屬性需要實時變換,明明這個屬性就支持你寫入Input它就消失,你不寫入它就存在。可以由於項目的已有代碼問題,我實在是被坑的沒轍,又不能改,只能加,然後就想對應的解決方法。我的解決方案是監控div:
一開始,div下嵌套著input,在input中寫入的時候,就會產生上面我們的自動補全下拉框(其實就是一個動態的div),一旦我們選中了一個下拉框的元素,那麼會在該div下生成一個span標簽,也就是說,input的placeholder屬性的值還存在,這代碼設計....坑的是後來人....然後我該怎麼解決?監控div就行。如果div下生成了一個span標簽那麼我們就是將input的placeholder設置為''.否則就設置為'必填欄位'。代碼拷貝不出來,因為在公司內網機上....
參考資料:
監聽div的內容
字元的模糊匹配
查找span標簽是否存在
動態添加div,及其顯示與隱藏
input標簽監聽寫入
根據參考資料就可以實現我上面說的那些了,具體請看具體分析。
轉載請註明出處: https://home.cnblogs.com/u/zhiyong-ITNote/