1. jquery autocomplete怎麼實現的
1、jquery.autocomplete詳解
語法:
autocomplete(urlor data, [options] )
參數:
url or data:數組或者url
[options]:可選項,選項解釋如下:
1) minChars (Number)
在觸發autoComplete前用戶至少需要輸入的字元數,Default:1,如果設為0,在輸入框內雙擊或者刪除輸入框內內容時顯示列表。
2) width (Number)
指定下拉框的寬度,Default: input元素的寬度
3) max (Number)
autoComplete下拉顯示項目的個數,Default: 10
4) delay (Number)
擊鍵後激活autoComplete的延遲時間(單位毫秒),Default: 遠程為400 本地10
5) autoFill (Boolean)
要不要在用戶選擇時自動將用戶當前滑鼠所在的值填入到input框,Default: false
6) mustMatch (Booolean)
如果設置為true,autoComplete只會允許匹配的結果出現在輸入框,所有當用戶輸入的是非法字元時將會得不到下拉框,Default:false
7) matchContains (Boolean)
決定比較時是否要在字元串內部查看匹配,如ba是否與foo bar中的ba匹配.使用緩存時比較重要.不要和autofill混用.Default: false
8) selectFirst (Boolean)
如果設置成true,在用戶鍵入tab或return鍵時autoComplete下拉列表的第一個值將被自動選擇,盡管它沒被手工選中(用鍵盤或滑鼠).當然如果用戶選中某個項目,那麼就用用戶選中的值. Default: true
9) cacheLength (Number)
緩存的長度.即對從資料庫中取到的結果集要緩存多少條記錄.設成1為不緩存.Default: 10
10) matchSubset (Boolean)
autoComplete可不可以使用對伺服器查詢的緩存,如果緩存對foo的查詢結果,那麼如果用戶輸入foo就不需要再進行檢索了,直接使用緩存.通常是打開這個選項以減輕伺服器的負擔以提高性能.只會在緩存長度大於1時有效.Default: true
11) matchCase (Boolean)
比較是否開啟大小寫敏感開關.使用緩存時比較重要.如果你理解上一個選項,這個也就不難理解,就好比foot要不要到FOO的緩存中去找.Default: false
12) multiple (Boolean)
是否允許輸入多個值即多次使用autoComplete以輸入多個值. Default:false
13) multipleSeparator (String)
如果是多選時,用來分開各個選擇的字元. Default:","
14) scroll (Boolean)
當結果集大於默認高度時是否使用卷軸顯示 Default: true
15) scrollHeight (Number)
自動完成提示的卷軸高度用像素大小表示 Default: 180
16) formatItem (Function)
為每個要顯示的項目使用高級標簽.即對結果中的每一行都會調用這個函數,返回值將用LI元素包含顯示在下拉列表中.Autocompleter會提供三個參數(row, i, max): 返回的結果數組, 當前處理的行數(即第幾個項目,是從1開始的自然數), 當前結果數組元素的個數即項目的個數.Default: none, 表示不指定自定義的處理函數,這樣下拉列表中的每一行只包含一個值.
17) formatResult (Function)
和formatItem類似,但可以將將要輸入到input文本框內的值進行格式化.同樣有三個參數,和formatItem一樣.Default: none,表示要麼是只有數據,要麼是使用formatItem提供的值.
18) formatMatch (Function)
對每一行數據使用此函數格式化需要查詢的數據格式. 返回值是給內部搜索演算法使用的. 參數值row
19) extraParams (Object)
為後台(一般是服務端的腳本)提供更多的參數.和通常的作法一樣是使用一個鍵值對對象.如果傳過去的值是{ bar:4 },將會被autocompleter解析成my_autocomplete_backend.php?q=foo&bar=4 (假設當前用戶輸入了foo). Default: {}
20) result (handler) Returns:jQuery
此事件會在用戶選中某一項後觸發,參數為:
event: 事件對象. event.type為result.
data: 選中的數據行.
formatted:formatResult函數返回的值
例如:
js">$("#singleBirdRemote").result(function(event,data,formatted){
//如選擇後給其他控制項賦值,觸發別的事件等等
});
2、jquery.autocomplete使用技巧
1) jquery.autocomplete需要的數據源可以為:本地數據和遠程數據
本地數據源為本地js數組或本地的json對象,如:
vardata=["c++","java","php","coldfusion","javascript"];
vardata=[{text:'LinkA',url:'/page1'},{text:'LinkB',url:'/page2'}];
在使用遠程地址時,它默認傳入的參數是:q(輸入值),limit(返回結果的最大值),可以使用extraParams傳入其他的參數,而且遠程數據源是需要固定格式的數據,返回結果:使用「
」分割每行數據,每行數據中使用「|」分割每個元素,如:
後台C#代碼:
復制代碼代碼如下:
stringdata="c++ java php coldfusion javascript";
stringdata="{text:'LinkA',url:'/page1'} {text:'LinkB',url:'/page2'}";
4、jquery.autocomplete實例
1) 本地數據源的調用方法
方法1:
代碼如下:
$("#tags").autocomplete(["c++","java","php","coldfusion","javascript"],{width:320,max:4,highlight:false,multiple:true,multipleSeparator:"",scroll:true,scrollHeight:300});
方法2:
代碼如下:
vardata=[{text:'LinkA',url:'/page1'},{text:'LinkB',url:'/page2'}];
$("...").autocomplete(data,{
formatItem:function(item){
returnitem.text;
}
}).result(function(event,item){
location.href=item.url;
});
2) 遠程數據數據源的調用方法
方法1:
前台js
代碼如下:
<scripttype="text/javascript">
$(document).ready(function(){
$("#Login").focus().autocomplete("/ajax/Account",{
formatItem:function(row,i,max){
varobj=eval("("+row+")");//轉換成js對象
returnobj.Text;
},
formatResult:function(row){
varobj=eval("("+row+")");//轉換成js對象
returnobj.Text;
}
}).result(function(event,item){
varobj=eval("("+item+")");//轉換成js對象
$("#link").attr(「href」,obj.url);
});
});
</script>
後台C#(mvc)代碼:
代碼如下:
(stringq)
{
stringstrResult="";
//...查詢數據操作...
//...格式化數據...
//格式完成的結果為
strResult="{text:'LinkA',url:'/page1'} {text:'LinkB',url:'/page2'}";
returnContent(strResult);
}
方法2:
前台js
復制代碼代碼如下:
<scripttype="text/javascript">
$(document).ready(function(){
$.getJSON("/ajax/Account",function(data){
$("#Login").focus().autocomplete(data,{
formatItem:function(item,i,max){
returnitem.Text;
},
formatResult:function(item){
returnitem.Text;
}
}).result(function(event,item){
$("#link").attr(「href」,item.url);
});
});
});
</script>
後台C#(mvc)代碼:
代碼如下:
publicContentResultAccount(stringq)
{
stringstrResult="";
//...查詢數據操作...
//...格式化數據...
//格式完成的結果為
strResult="[{"text":"LinkA","url":"/page1"},{"text":"LinkB","url":"/page2"}]";
returnContent(strResult);
}
2. 怎麼使用java操作mongodb更新整個文檔
上篇博客介紹了java操作mongoDB進行對文件的處理。現在來介紹一下對文檔的處理。和對文件的處理一樣,也是通過java驅動中提供的幾個類相互作用完成的。這幾個類分別是:
DBCollection類:指定資料庫中指定集合的實例,提供了增刪改查等一系列操作。在關系型資料庫中,對數據的增刪改查操作是建立在表的基礎上的,在mongodb中是建立在集合的基礎上進行的。
DBObject介面:DBObject是鍵值的映射,因此,可以將DBObject的實現類作為查詢的返回結果,也可以作為查詢條件
DBCursor:游標,返回結果的集合。
下面是部分實例:
[java] view plain
Mongo mongo = new Mongo();
DB db = mongo.getDB("myMongoDB");
DBCollection course = db.getCollection("course");//對myMongoDB資料庫中course集合進行操作
//添加操作
//下面分別是創建文檔的幾種方式:1. .append() 2. .put() 3. 通過map 4. 將json轉換成DBObject對象
DBObject english = new BasicDBObject().append("name","english").append("score", 5).append("id",1);
course.insert(english);
DBObject math = new BasicDBObject();
math.put("id", 2);
math.put("name", "math");
math.put("score", 10);
course.insert(math);
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","physics" );
map.put("score", 10);
map.put("id", 3);
DBObject physics= new BasicDBObject(map);
course.insert(physics);
String json ="{'name':'chemistry','score':10,'id':4}";
DBObject chemistry =(DBObject)JSON.parse(json);
course.insert(chemistry);
List<DBObject> courseList = new ArrayList<DBObject>();
DBObject chinese = new BasicDBObject().append("name","chinese").append("score", 10).append("id", 5);
DBObject history = new BasicDBObject().append("name", "history").append("score", 10).append("id", 6);
courseList.add(chinese);
courseList.add(history);
course.insert(courseList);
//添加內嵌文檔
String json2 =" {'name':'english','score':10,'teacher':[{'name':'柳松','id':'1'},{'name':'柳鬆鬆','id':2}]}";
DBObject english2= (DBObject)JSON.parse(json);
course.insert(english2);
List<DBObject> list = new ArrayList<DBObject>();
list.add(new BasicDBObject("name","柳松").append("id",1));
list.add(new BasicDBObject("name","柳鬆鬆").append("id",2));
DBObject english3= new BasicDBObject().append("name","english").append("score",10).append("teacher",list);
//查詢
//查詢所有、查詢一個文檔、條件查詢
DBCursor cur = course.find();
while(cur.hasNext()){
DBObject document = cur.next();
System.out.println(document.get("name"));
}
DBObject document = course.findOne();
String name=(String)document.get("name");
System.out.println(name);
//查詢學分=5的
DBObject query1 = new BasicDBObject("score",5);
DBObject query2 = new BasicDBObject("score",new BasicDBObject("$gte",5));
DBCursor cur2 = course.find(query2);
//條件表達式:$ge(>) $get(>=) $lt(<) $lte(<=) $ne(<>) $in $nin $all $exists $or $nor $where $type等等
//查找並修改
DBObject newDocument = course.findAndModify(new BasicDBObject("score",5), new BasicDBObject("score",15));
//更新操作
//q:更新條件 o:更新後的對象
course.update(new BasicDBObject("score",10), new BasicDBObject("test",15));
course.update(new BasicDBObject("score",15), new BasicDBObject("$set",new BasicDBObject("isRequired",true)));
//兩個的區別是,第一個更新是將{"test":15}這個文檔替換原來的文檔,
//第二個更新添加了條件表達式$set,是在原來文檔的基礎上添加"isRequired"這個鍵
//條件表達式:$set $unset $push $inc $push $push $addToSet $pull $pullAll $pop等等
//當_id相同時,執行save方法相當於更新操作
course.save(new BasicDBObject("name","math").append("_id", 1));
course.save(new BasicDBObject("name","數學").append("_id", 1));
//刪除符合條件的文檔
course.remove(new BasicDBObject("score",15));
//刪除集合及所有文檔
course.drop();<span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;">
</span></span>
上面只是介紹了一些簡單的操作,具體復雜的查詢更新可以根據需求再去查找文檔資料。其實,不管操作簡單還是復雜,其核心都是對DBObject和DBCollection的操作,主要掌握DBObject如何構造鍵值對,以及一些條件表達式。
3. Qt--解析Json
在Qt中解析JSON數據,主要依賴於QJsonDocument、QJsonArray、QJsonObject等類。以下是解析JSON數據的步驟和相關類的使用方法:
使用QJsonDocument類:
使用QJsonArray類:
使用QJsonObject類:
解析流程:
錯誤處理:
通過上述步驟和類,可以在Qt中有效地解析和處理JSON數據。