2018-01-31 AngularJs下拉框在編輯頁面?zhèn)髦祮栴}坑资、map集合類迭代方法、JS與DOM編程藝術(shù)—— 最佳實踐穆端、獲取list中具體某一元素某一字段的值袱贮、返回文檔中匹配指定的選擇器組

第一組:姚成棟 AngularJs下拉框在編輯頁面?zhèn)髦祮栴}

編輯頁面的數(shù)據(jù)我們往往是通過查詢頁面的model傳過來的,類似于


而編輯頁面的js中只需要在頭部引入model体啰,就可以接收到查詢頁面的trainoutline數(shù)據(jù)攒巍。如果要展示在編輯頁面上只需要用$scope.model=model即可。在一般情況下狡赐,數(shù)據(jù)能輕而易舉傳到前臺,但是如果遇到下拉控件钦幔,類似于如下圖


雖然能正常顯示數(shù)據(jù)枕屉,但是因為傳的值僅僅是賦給其中的model.BT_TheoryTeacherType,而不是ng-model的searchPara.BT_TheoryTeacherType鲤氢,所以無法保存值搀擂。

解決這個問題也很簡單西潘,直接在控制器中將model的值直接給searchPara.BT_TheoryTeacherType,類似于


即可哨颂。
再扯一點喷市,如果你用的是多選,則需要換成數(shù)組威恼,


但是多選的編輯頁面展示暫時沒想到什么好的方法品姓,因為我也沒遇到,等到實在要用了我再去研究~


第二組:徐晉 map集合類迭代方法

java中的map集合類用于存儲鍵值對箫措,提供鍵(key)到值(value)的映射腹备,不允許鍵重復(fù),值可以重復(fù)斤蔓。
代碼提供Map的兩種迭代方式:keyset方法和entryset方法植酥。并使用傳統(tǒng)Iterator方式和增強(qiáng)for循環(huán)的方式進(jìn)行迭代。

工程開發(fā)實踐中弦牡,更多的會使用到entryset方法友驮,重點掌握entryset!基礎(chǔ)例子

1.  /** 
2.   *  
3.   * 功能:Map的迭代方式: 
4.   *      1.keyset方法 
5.   *          獲取Map集合中的所有鍵的Set集合驾锰,然后通過Set集合中的鍵訪問Map集合中相應(yīng)的值 
6.   *      2.entryset 
7.   *          獲取Map集合中所有的鍵值對卸留,并以Map.Entry的格式存入Set集合中,然后通過 
8.   *      Map.Entry的getKey()和getValue()方法訪問鍵值對 
9.   */  
10.   
11. package com.test.map;  
12.   
13. import java.util.Iterator;  
14. import java.util.LinkedHashMap;  
15. import java.util.Map;  
16. import java.util.Set;  
17.   
18. import org.junit.Test;  
19.   
20. public class Demo1 {  
21.       
22.     //傳統(tǒng)方法迭代  
23.     @Test  
24.     public void test1(){  
25.           
26.         Map<Integer,String> map = new LinkedHashMap<Integer,String>();  
27.         map.put(1, "aa");  
28.         map.put(2, "bb");  
29.         map.put(3, "cc");  
30.           
31.         //傳統(tǒng)  1.keyset  
32.         //獲取map集合中的所有鍵的Set集合  
33.         Set<Integer> set = map.keySet();  
34.         Iterator<Integer> it = set.iterator();  
35.         while(it.hasNext()){  
36.             int key = it.next();  
37.             String value = map.get(key);  
38.               
39.             System.out.println(key + ":" + value);  
40.         }  
41.     }  
42.       
43.     @Test  
44.     public void test2(){  
45.           
46.         Map<Integer,String> map = new LinkedHashMap<Integer,String>();  
47.         map.put(1, "aa");  
48.         map.put(2, "bb");  
49.         map.put(3, "cc");  
50.           
51.         //傳統(tǒng)  2.entryset  
52.         Set<Map.Entry<Integer,String>> set = map.entrySet();  
53.         Iterator<Map.Entry<Integer,String>> it = set.iterator();  
54.         while(it.hasNext()){  
55.             Map.Entry<Integer,String> entry = it.next();  
56.             int key = entry.getKey();  
57.             String value = entry.getValue();  
58.               
59.             System.out.println(key + ":" + value);  
60.         }  
61.     }  
62.       
63.       
64.     //使用增強(qiáng)for循環(huán)進(jìn)行迭代  
65.     @Test  
66.     public void test3(){  
67.           
68.         Map<Integer,String> map = new LinkedHashMap<Integer,String>();  
69.         map.put(1, "aa");  
70.         map.put(2, "bb");  
71.         map.put(3, "cc");  
72.           
73.         //增強(qiáng)for循環(huán)  1.keyset  
74.         Set<Integer> set = map.keySet();  
75.         for(int key : set){  
76.             String value = map.get(key);  
77.               
78.             System.out.println(key + ":" + value);  
79.         }  
80.     }  
81.       
82.     @Test  
83.     public void test4(){  
84.           
85.         Map<Integer,String> map = new LinkedHashMap<Integer,String>();  
86.         map.put(1, "aa");  
87.         map.put(2, "bb");  
88.         map.put(3, "cc");  
89.           
90.         //增強(qiáng)for循環(huán)   2.entryset  
91.         Set<Map.Entry<Integer,String>> set = map.entrySet();  
92.         for(Map.Entry<Integer,String> entry : set){  
93.             int key = entry.getKey();  
94.             String value = entry.getValue();  
95.               
96.             System.out.println(key + ":" + value);  
97.         }  
98.     }  
99.       
100.    }  

第三組: JS與DOM編程藝術(shù)—— 最佳實踐

筆記:

平穩(wěn)退化:確保網(wǎng)頁在沒有JavaScript的情況下也能正常工作稻据。
分離JavaScript:把網(wǎng)頁的結(jié)構(gòu)和內(nèi)容與JavaScript腳本動作行為分開
向后兼容性:確保老版本的瀏覽器不會因為你的JavaScript腳本而死掉艾猜。
性能考慮:確定腳本執(zhí)行的性能最優(yōu)。

  • 漸進(jìn)增強(qiáng):所謂漸進(jìn)增強(qiáng)就是用一些額外的信息層去包裹原始數(shù)據(jù)捻悯。按照“漸進(jìn)增強(qiáng)”的原則創(chuàng)建出來的網(wǎng)頁幾乎(如果不是全部的話)都符合“平穩(wěn)退化”原則匆赃。
    類似與CSS,JavaScript和DOM提供的所有功能也應(yīng)該構(gòu)成一個額外的指令層今缚。CSS代碼負(fù)責(zé)提供關(guān)于“表示”的信息算柳,JavaScript代碼負(fù)責(zé)提供關(guān)于“行為”的信息。行為層的應(yīng)用方 式與表示層一樣姓言。

  • 分離JavaScript

var links= document.getElementsByTagName(“瞬项,”);
for(var i = 0;i<links,length;i++){
    if(links[i].getAttribute("class")=="popup"){
        links[i].onclick = function(){
          popUp(this.getAttribute("href"));
          return false;
      }
    }
}

以上代碼把調(diào)用popUp()函數(shù)的onclick事件添加到有關(guān)的鏈接上何荚。只要把它們存入一個外部的JavaScript文件囱淋,就等于是把這些操作從HTML文檔里分離出來了。而這就是“分離JavaScript”的含義餐塘。

還有個問題需要解決:如果把這段代碼存入外部文件妥衣,它們將無法運行。因為這段代碼的第一行是:
var links= document.getElementsByTagName(“,”)税手;

這條語句將在JavaScript文件被加載時立即執(zhí)行蜂筹。如果JavaScript文件是從HTML文檔的<head>部分用<script>標(biāo)簽調(diào)用的,它將在HTML文檔之前加載到瀏覽器芦倒。同樣艺挪,如果<script>標(biāo)簽位于文檔底部<body>之前,就不能保證哪個文件最先結(jié)束加載(瀏覽器可能一次加載多個)兵扬。因為腳本加載時文檔可能不完整麻裳,所以模型也不完整。沒有完整的DOM周霉,getElementsByTagName等方法就不能正常工作

必須讓這些代碼在HTML文檔全部加載到瀏覽器之后馬上開始執(zhí)行掂器。還好,HTML文檔全部加載完畢時將觸發(fā)一個事件俱箱,這個事件有它自己的事件處理函數(shù)国瓮。

文檔將被加載到一個瀏覽器窗口里,document對象又是window對象的一個屬性狞谱。當(dāng)window對象出發(fā)onload事件時乃摹,document對象已經(jīng)存在。

我將把我的JavaScript代碼打包在prepareLinks函數(shù)里跟衅,并把這個函數(shù)添加到widow對象的onload事件上去孵睬。這樣一來,DOM就可以正常工作了:

window.onload = prepareLinks;
function prepareLinks(){
  var links= document.getElementsByTagName(“伶跷,”)掰读;
  for(var i = 0;i<links,length;i++){
      if(links[i].getAttribute("class")=="popup"){
          links[i].onclick = function(){
            popUp(this.getAttribute("href"));
            return false;
        }
      }
  }
}

別忘記把popUp函數(shù)也保存到那個外部JavaScript文件里去:

function popUp(winURL){
  window.open(winURL,"popup","windth=320,height=480");
}

第四組:李俊 獲取list中具體某一元素某一字段的值

在增加信息的過程中,往往需要對新數(shù)據(jù)與原數(shù)據(jù)進(jìn)行對比叭莫,以此判斷新數(shù)據(jù)是否與原數(shù)據(jù)重復(fù)蹈集。若重復(fù)則添加(修改)無效,返回原值雇初。而原值保存在一個list里面拢肆。如果將重復(fù)值的行、列值得到靖诗,就可從list中獲取原值郭怪。本例中,newData是新數(shù)據(jù)刊橘,nameType=1表示是對機(jī)型進(jìn)行重復(fù)檢測鄙才,caption存放原值,row表示當(dāng)前行值促绵,column表示當(dāng)前列值:

private void checkDataRepeat(string newData, int nameType, string caption, int row, string column) {
    if (nameType == 1) {
        //機(jī)型重復(fù)檢測
        if (checkShortRepeats.Contains(newData)) {
            XtraMessageBox.Show("所填機(jī)型數(shù)據(jù)已存在攒庵,請勿重復(fù)");
            //返回原值
            UIT4007 ACTypeInfo = new UIT4007();
            Loc.Support.GetT4007SearchPara SearchParam = new Loc.Support.GetT4007SearchPara {
                UIT_Model = ACTypeInfo
            };
            UIModelListResult < UIT4007 > originalData = DispatchHandler.GetAcTypeList(SearchParam);
            //對原數(shù)據(jù)進(jìn)行更改失敗的時候返回原值
            if (row < originalData.List.Length) {
                //取對應(yīng)字段的值
                Model.UIT4007 fieldData = originalData.List[row];
                string testValue = "";
                Type type = typeof(Model.UIT4007);
                System.Reflection.PropertyInfo property = type.GetProperty(column);
                if (property != null) {
                    object cellValue = property.GetValue(fieldData, null);
                    testValue = (cellValue == null ? "": cellValue.ToString());
                }
                //修改失敗的單元格數(shù)據(jù)重新返回原值据途,方法是通過以原值進(jìn)行賦值     
                gridView1.SetRowCellValue(row, column, testValue);
                gridView1.RefreshRow(row);
            }
            //在新增數(shù)據(jù)過程中,對單元格增加失敗時返回單元格最初空值狀態(tài)
            else {
                gridView1.SetRowCellValue(row, column, "");
                gridView1.RefreshRow(row);
            }
        }
    }

第五組:周倩宇

返回文檔中匹配指定的選擇器組的第一個元素(使用深度優(yōu)先先序遍歷文檔的節(jié)點 | 并且通過文檔標(biāo)記中的第一個元素叙甸,并按照子節(jié)點數(shù)量的順序迭代順序節(jié)點)。

語法

element = document.querySelector(selectors);
element 是一個 element 對象(DOM 元素)位衩。
selectors 是一個字符串裆蒸,包含一個或是多個 CSS 選擇器 ,多個則以逗號分隔糖驴。

例子

這個例子中僚祷,會返回當(dāng)前文檔中第一個類名為 "myclass" 的元素:
var el = document.querySelector(".myclass");

例子:一個強(qiáng)大的選擇方式

這個例子中,你將感受到selectors的強(qiáng)大贮缕。例子將返回<div class="user-panel main">標(biāo)簽中的<input name="login"/>標(biāo)簽辙谜。

<div class="user-panel main">
    <input name="login"/> //這個標(biāo)簽將被返回
</div>

<script>
    var el = document.querySelector("div.user-panel.main input[name=login]");
</script>
注意

如果沒有找到匹配元素,則返回 null感昼,如果找到多個匹配元素装哆,則返回第一個匹配到的元素。

如果選擇器是一個 ID定嗓,并且這個 ID 在文檔中錯誤地使用了多次蜕琴,那么返回第一個匹配該 ID 的元素。

如果指定的選擇器不合法宵溅,則拋出 SYNTAX_ERR 異常凌简。

querySelector()在 Selectors API 中引入。

傳遞給 querySelector 的字符串參數(shù)必須符合 CSS 語法恃逻。

CSS 偽類不會返回任何元素雏搂,見 Selectors API 中的相關(guān)規(guī)定。

如果要匹配的ID或選擇器不符合 CSS 語法(比如不恰當(dāng)?shù)厥褂昧嗣疤柣蛘呖崭瘢┛芩穑惚仨氂梅葱备軐⑦@些字符轉(zhuǎn)義凸郑。由于 JavaScript 中,反斜杠是轉(zhuǎn)義字符润绵,所以當(dāng)你輸入一個文本串時线椰,你必須將它轉(zhuǎn)義兩次(一次是為 JavaScript 字符串轉(zhuǎn)義,另一次是為 querySelector 轉(zhuǎn)義):

<div id="foo\bar"></div>
<div id="foo:bar"></div>

<script>
  console.log('#foo\bar')               // "#fooar"
  document.querySelector('#foo\bar')    // 不匹配任何元素

  console.log('#foo\\bar')              // "#foo\bar"
  console.log('#foo\\\\bar')            // "#foo\\bar"
  document.querySelector('#foo\\\\bar') // 匹配第一個div元素

  document.querySelector('#foo:bar')    // 不匹配任何元素
  document.querySelector('#foo\\:bar')  // 匹配第二個div
</script>

例子:http://www.runoob.com/jsref/met-document-queryselector.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尘盼,一起剝皮案震驚了整個濱河市憨愉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卿捎,老刑警劉巖配紫,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異午阵,居然都是意外死亡躺孝,警方通過查閱死者的電腦和手機(jī)享扔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來植袍,“玉大人惧眠,你說我怎么就攤上這事∮诟觯” “怎么了氛魁?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厅篓。 經(jīng)常有香客問我秀存,道長,這世上最難降的妖魔是什么羽氮? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任或链,我火速辦了婚禮,結(jié)果婚禮上档押,老公的妹妹穿的比我還像新娘澳盐。我一直安慰自己,他們只是感情好令宿,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布洞就。 她就那樣靜靜地躺著,像睡著了一般掀淘。 火紅的嫁衣襯著肌膚如雪旬蟋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天革娄,我揣著相機(jī)與錄音倾贰,去河邊找鬼。 笑死拦惋,一個胖子當(dāng)著我的面吹牛匆浙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厕妖,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼首尼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了言秸?” 一聲冷哼從身側(cè)響起软能,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎举畸,沒想到半個月后查排,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡抄沮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年跋核,在試婚紗的時候發(fā)現(xiàn)自己被綠了岖瑰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡砂代,死狀恐怖蹋订,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刻伊,我是刑警寧澤辅辩,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站娃圆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛾茉。R本人自食惡果不足惜讼呢,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谦炬。 院中可真熱鬧悦屏,春花似錦、人聲如沸键思。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吼鳞。三九已至看蚜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赔桌,已是汗流浹背供炎。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留疾党,地道東北人音诫。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像雪位,于是被迫代替她去往敵國和親竭钝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理雹洗,服務(wù)發(fā)現(xiàn)香罐,斷路器,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 概述 document節(jié)點是文檔的根節(jié)點时肿,每張網(wǎng)頁都有自己的document節(jié)點穴吹。window.document屬...
    許先生__閱讀 620評論 0 2
  • 在韓國劉在石的人氣可以說是到達(dá)了家喻戶曉的程度港令。在中國啥容,愛好韓國綜藝節(jié)目的人對劉在石這個名字也許也都不陌生。 人物...
    簡單的親故閱讀 1,078評論 6 9
  • 簡粉下載是一款可以將簡書上的文章保存為HTML文件的Windows軟件顷霹,圖文排版與簡書保持一致咪惠,為文章(包括插圖)...
    逸之閱讀 696評論 10 5
  • 我選擇,安于煙花巷陌 煮酒消茶 聽蟬時雨 聞葉下歌 我選擇淋淀,游離煙火之外 描江夜花 繪紅塵夢 浪跡天涯
    予行其前霧徙而隨閱讀 344評論 2 3