中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript通過HTML的class來獲取HTML元素的方法總結
來源:易賢網 閱讀:1533 次 日期:2016-06-23 16:00:52
溫馨提示:易賢網小編為您整理了“JavaScript通過HTML的class來獲取HTML元素的方法總結”,方便廣大網友查閱!

除了getElementsByClassName()函數,我們可以自己動手編寫程式來通過class獲取元素,接下來我們整理了一下JavaScript通過HTML的class來獲取HTML元素的方法總結,需要的朋友可以參考下

對于js來說,我想每一個剛接觸它的人都應該會抱怨:為什么沒有一個通過class來獲取元素的方法。盡管現在高版本的瀏覽器已經支持getElementsByClassName()函數,但是對于低版本瀏覽器來說,還是無法兼容,在脫離其他庫的時候,還是得自己封裝一個方法。

方法一

function getByClass1(parent, cls){

  var res = [];  //存放匹配結果的數組

  var ele = parent.getElementsByTagName('*');

  for(var i = 0; i < ele.length; i++){

    if(ele[i].className == cls){

      res.push(ele[i]);

    }

  }

  return res;

}

當然class里的值只有一個時,上面的方法沒問題,但當值為多個時,就會出現問題。

<div class="test"></div>

<div class="test box"></div>

<script>

  getByClass1(document, 'test');  //只獲取到第一個div

</script>

方法二

出現問題的時候,我們會嘗試著改進,對于多類名的情況我們可以用正則去匹配是否包含所要查找的class名,于是就出現了下面這種寫法:

function getByClass2(parent, cls){

  var res = [];

  var reg = new RegExp('\\b' + cls + '\\b', 'i');  //匹配cls是一個獨立的單詞

  var ele = parent.getElementsByTagName('*');

  for(var i = 0; i < ele.length; i++){

    if(reg.test(ele[i].className)){

      res.push(ele[i]);

    }

  }

  return res;

}

這種方法看似可以,解決了getByClass1()的問題,我也用了好長一段時間,但是還會有一個隱藏的bug。看下面的例子:

<div class="test"></div>

<div class="test_box"></div>

<div class="test-box"></div>

<script>

  getByClass2(document, 'test');  //結果獲取到了第一個div和第三個div

</script>  

理論上應該只獲取到第一個,但是卻和我們預期不一樣。這個bug源于下面這段代碼里的\b

var reg = new RegExp('\\b' + cls + '\\b', 'i');

我們先來看下\b在正則中的表示的意思

\b是正則表達式規定的一個特殊代碼,代表著單詞的開頭或結尾,也就是單詞的分界處。

通俗點說:\b就是匹配一個單詞(從左邊界到右邊界)。

而問題也就出在這里,\b把除字母、數字、下劃線外的其他字符都當成是邊界,對于上面的例子中第三個class值為test-box,\b匹配時,把連字符(-)當作單詞邊界,所以也匹配了第三個div。

方法三

因此我們還需要對上面方法進行進一步改進,這里參考了stackoverflow上提到的一種方法:

How to Get Element By Class in JavaScript?

改進后的代碼如下:

function getByClass3(parent, cls){

  var res = [];

  var reg = new RegExp(' ' + cls + ' ', 'i');  //匹配cls時,兩邊需要有空格

  var ele = parent.getElementsByTagName('*');

  for(var i = 0; i < ele.length; i++){

    if(reg.test(' ' + ele[i].className + ' ')){

      res.push(ele[i]);

    }

  }

  return res;

}

這種方法舍去了用\b而采用空格來匹配邊界,先在獲取到的className值兩邊加上空格,這樣就保證了className里的每個值兩邊都會有空格,然后再用正則去匹配。

用這種方法暫時還未發現問題,但是使用時,方法中的單引號內的空格一定不能落下。

方法四

function getByClass3(parent, cls){

  var res = [];

  var reg = new RegExp('(^|\\s)' + cls + '($|\\s)', 'i');

  var ele = parent.getElementsByTagName('*');

  for(var i = 0; i < ele.length; i++){

    if(reg.test(ele[i].className)){

      res.push(ele[i]);

    }

  }

  return res;

}

空格完全用正則來處理,這樣省去了空格容易落下的問題,代碼也更美觀精簡。

那么這種方法是否就是比較完美的呢,其實不然,下面來看下更優的方案。

方法五(完美版)

文章開頭已經提到,高版本的瀏覽器已經支持getElementsByClassName()方法。出于性能考慮,對支持的瀏覽器使用原生方法勢必會更好。而對于低版本的瀏覽器使用上面的方法四。

function getByClass(parent, cls){

  if(parent.getElementsByClassName){

    return parent.getElementsByClassName(cls);

  }else{

    var res = [];

    var reg = new RegExp(' ' + cls + ' ', 'i')

    var ele = parent.getElementsByTagName('*');

    for(var i = 0; i < ele.length; i++){

      if(reg.test(' ' + ele[i].className + ' ')){

        res.push(ele[i]);

      }

    }

    return res;

  }

}

當然方法五自認為是相對較好的方案,如果有更優秀的方法歡迎留言補充。

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美在线www| 国产精品专区h在线观看| 久久久天天操| 国产精品羞羞答答| 亚洲欧美在线观看| 欧美日韩精品免费观看| 这里是久久伊人| 欧美日韩一区二区在线观看视频 | 国产精品v欧美精品v日韩| 亚洲美女中文字幕| 欧美午夜精品理论片a级按摩| 欧美影院一区| 午夜亚洲伦理| 欧美尤物一区| 国产精品久久久久久模特| 亚洲欧美另类国产| 国产永久精品大片wwwapp| 久久视频免费观看| 亚洲国产精品久久久久婷婷老年 | 国产区精品视频| 性做久久久久久免费观看欧美| 国产亚洲欧美在线| 欧美激情综合在线| 午夜久久福利| 最新日韩在线| 日韩午夜中文字幕| 欧美日韩国产在线| 久久亚洲精品视频| 国产精品啊啊啊| 国产精品久久福利| 国产老女人精品毛片久久| 国产一区二区三区在线观看免费| 亚洲免费激情| 亚洲一级特黄| 久久午夜色播影院免费高清| 欧美激情视频一区二区三区免费| 欧美日韩在线视频一区二区| 国产精品亚洲综合| 亚洲国产精品电影| 亚洲欧美区自拍先锋| 久久色在线观看| 久久裸体艺术| 欧美在线亚洲在线| 亚洲午夜精品一区二区| 亚洲精品久久| 亚洲片区在线| 亚洲在线1234| 亚洲激情在线观看| 欧美日韩免费网站| 亚洲欧美另类中文字幕| 国产伦理精品不卡| 另类人畜视频在线| 18成人免费观看视频| 免费精品视频| 国产农村妇女精品一区二区| 久久久999成人| 亚洲人成小说网站色在线| 狠狠色丁香久久综合频道| 欧美日韩国产bt| 久久噜噜噜精品国产亚洲综合| 99riav久久精品riav| 欧美国产日本| 久久久久成人精品| 亚洲欧美日韩在线不卡| 亚洲欧美色婷婷| 亚洲亚洲精品在线观看 | 一本一本a久久| 亚洲专区国产精品| 亚洲自拍偷拍色片视频| 亚洲一区二区三区三| 亚洲欧美成人一区二区三区| 欧美一区成人| 欧美大片免费观看在线观看网站推荐| 久久视频精品在线| 欧美日韩日本网| 国产伦精品一区二区三区高清版| 国产伦精品一区| 亚洲激情综合| 亚洲欧美在线免费| 国产精品久久久久aaaa九色| 欧美日韩亚洲一区二区三区四区 | 欧美激情视频一区二区三区免费 | 欧美国产日韩xxxxx| 亚洲欧美日韩国产中文| **网站欧美大片在线观看| 国产一区二区三区久久精品| 国产午夜精品久久| 亚洲精品视频在线观看免费| 欧美日本韩国一区| 亚洲国产成人一区| 亚洲电影免费在线| 国语自产精品视频在线看| 国产精品最新自拍| 国产精品h在线观看| 欧美日产国产成人免费图片| 亚洲第一在线综合在线| 欧美日韩一区三区| 欧美日韩国产电影| 国模套图日韩精品一区二区| 99re6这里只有精品| 亚洲免费在线观看| 久久久国产午夜精品| 欧美不卡福利| 欧美午夜宅男影院| 日韩一级成人av| 欧美日韩 国产精品| 日韩一区二区精品葵司在线| 欧美xxx成人| av成人老司机| 国产精品日韩精品欧美在线| 亚洲视频国产视频| 亚洲国语精品自产拍在线观看| 久久精品夜色噜噜亚洲a∨ | 久久精品午夜| 黄色一区二区三区| 欧美成人精品三级在线观看| 亚洲乱码国产乱码精品精天堂| 欧美激情在线狂野欧美精品| 夜夜嗨av色综合久久久综合网| 欧美理论电影在线观看| 亚洲一区二区三区免费观看| 国产日韩精品在线| 久久综合影视| 亚洲特黄一级片| 亚洲第一久久影院| 国产精品成人一区二区三区夜夜夜| 香蕉久久一区二区不卡无毒影院| 伊人狠狠色j香婷婷综合| 欧美日韩国产精品一卡| 久久精品人人爽| 99这里有精品| 一区久久精品| 国产乱码精品一区二区三| 久久精品成人欧美大片古装| 亚洲六月丁香色婷婷综合久久| 国产三级欧美三级| 欧美日韩www| 免费久久99精品国产| 亚洲综合色激情五月| 日韩亚洲视频| 亚洲黄色高清| 亚洲成在线观看| 香蕉久久精品日日躁夜夜躁| 亚洲国产精品一区二区第四页av| 国产伦精品一区二区三区照片91 | 欧美激情精品久久久久久大尺度 | 美女视频黄a大片欧美| 先锋影音国产一区| 亚洲图片激情小说| 一区二区日韩精品| 正在播放欧美一区| 在线午夜精品| 亚洲一区二区三区视频播放| 一区二区三区欧美激情| 日韩午夜免费| 一本高清dvd不卡在线观看| 亚洲人成在线播放网站岛国| 亚洲国产精品热久久| 亚洲电影成人| 91久久久久久| 在线一区二区三区做爰视频网站| 99精品99久久久久久宅男| 亚洲少妇自拍| 午夜精品久久久久久久久| 午夜精品一区二区三区电影天堂| 性欧美精品高清| 久久久国产精品亚洲一区 | 亚洲一区二区三区在线观看视频| 99在线视频精品| 亚洲图片欧美一区| 久久国产婷婷国产香蕉| 鲁鲁狠狠狠7777一区二区| 欧美成ee人免费视频| 狠狠色狠狠色综合日日91app| 国产综合在线视频| 亚洲欧洲日本国产| 中文日韩电影网站| 欧美在线视屏| 欧美精品日韩一区| 国产免费观看久久黄| 91久久国产综合久久蜜月精品| 一本色道久久综合亚洲精品小说 | 久久九九国产| 欧美日韩一区二区三区在线| 国产在线不卡视频| av不卡在线观看| 久久久成人精品| 国产精品久久国产愉拍| 亚洲人成网站色ww在线| 久久精品女人| 国产欧美一区二区精品秋霞影院| 亚洲黄色成人| 久久久91精品国产一区二区三区 | 国产在线一区二区三区四区| 亚洲国产高清一区| 久久精品系列| 国产美女搞久久| 亚洲影音先锋| 欧美午夜精品一区| 99www免费人成精品|