国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

查找頁面中所有類為test的結點的方法

2024-05-06 16:03:23
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了查找頁面中所有類為test結點的方法,需要的朋友可以參考下

前言

阿里巴巴,web前端實習生要在線考試了。確實對于菜鳥的我還是惡補一下知識先。所以百度谷歌了之前阿里巴巴校招的前端筆試題,覺得自己真的被鄙視了,完全做不懂的。啊里巴巴的web前端是在線的筆試,是不是給我們百度谷歌的機會呢?

看見這道題目的時候,覺得確實自己應該去封裝一些你常用的方法,就像jquery那樣。做出一些方法,是實現瀏覽器兼容的,或者是工具類,確實對以后開發還是有利的。

HTML

為了方便說明,我們先寫下HTML

復制代碼 代碼如下:


<p>find me</p>
<div>also find me</div>


css我們就省略了,我們的重點有不是css樣式是怎么寫,我們要的是用javascript通過樣式名去尋找結點集合。

實現的方法

1 getElementsByClassName

復制代碼 代碼如下:


console.log(document.getElementsByClassName("A"));
console.log(document.getElementsByClassName("A B"));


出現的結果(firefox 27.0)

查找頁面中所有類為test的結點的方法

 

確實這個方法,我覺得應該就能解決上面的問題了,但是看了它的兼容性,我覺得應該還是另找方法吧。

查找頁面中所有類為test的結點的方法

 

2 querySelectorAll

復制代碼 代碼如下:


console.log(document.querySelectorAll (".A"));
console.log(document.querySelectorAll (".B,.A"));



我們來看看結果是什么?跟上面有什么區別?

查找頁面中所有類為test的結點的方法

 

第二個的結果不一樣,原來querySelectorAll參數,如果有兩個的話,要用逗號分隔,其實它表示的意思是有A樣式或者B樣式的結點都可以匹配。

其實這個方法的兼容性也不是很好

查找頁面中所有類為test的結點的方法

 

基于上面兼容性的問題(畢竟在中國瀏覽器ie6/7/8還是占多數的嘛) ,我還不如自己做一個方法去實現呢。

3 queryNodesByClass

我覺得應該先說下我的思路

(1) 先獲取整個頁面每個節點
(2) 遍歷每個節點,獲取它的className字符串
(3)操作className字符串,先以空格來分割成數組,再用一個對象,設置其key為每個數組元素,那么對應的value為true
(4)現在的問題就是根據你傳入的參數(比如一個參數就是"selector",兩個的話就是"selector_1 selector_2",以此類推),然后將它也轉變成數組,每個數組元素做為之前我們結點className字符串對應的對象的key值,如果匹配的話,就是true,沒有的話就是undefined。

那現在我們給出我們的代碼

復制代碼 代碼如下:


function StringToObj(string){
var arr = string.split(" ").sort();
var result = {};
for(var i=arr.length-1;arr[i];i--){
result[arr[i]] = true;
}
return result;
}


復制代碼 代碼如下:


function StringToArray(string){
var arr = string.split(" ").sort();
var result = [];
for(var i=arr.length-1;arr[i];i--){
result.push(arr[i]);
}
return result;
}


復制代碼 代碼如下:


function queryNodesByClass(classname){
//思路(1)
var all = document.getElementsByTagName("*"),len = all.length,result = [];
var cname = StringToArray(classname);//思路(4)
for(var i=0;i<len;i++){//遍歷每個節點 對應思路(2)
//對應的是思路(3)也就是StringToObj方法起的作用
var dom_cname = StringToObj(all[i].className),cname_len = cname.length;
for(var j=0;j<cname_len;j++){
if(!dom_cname[cname[j]])
break;
}
if(j == cname_len)
{
result.push(all[i]);
}}
return result;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 青河县| 新龙县| 博兴县| 上杭县| 五家渠市| 平武县| 永春县| 酉阳| 上虞市| 英吉沙县| 防城港市| 云林县| 肇源县| 海伦市| 雅江县| 涞源县| 台北市| 基隆市| 彭阳县| 五指山市| 鄱阳县| 通许县| 个旧市| 澜沧| 沾化县| 玉树县| 乾安县| 辉县市| 刚察县| 高安市| 华安县| 安新县| 吴桥县| 新巴尔虎左旗| 乌兰察布市| 罗源县| 中江县| 大宁县| 云安县| 临夏市| 延安市|