萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> js與jquery獲取父級元素,子級元素,兄弟元素的實現方法

js與jquery獲取父級元素,子級元素,兄弟元素的實現方法

 本篇文章主要是對js與jquery獲取父級元素,子級元素,兄弟元素的實現方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助

先說一下JS的獲取方法,其要比JQUERY的方法麻煩很多,後面以JQUERY的方法作對比   JS的方法會比JQUERY麻煩很多,主要則是因為FF浏覽器,FF浏覽器會把你的換行也當最DOM元素   原生的JS獲取ID為test的元素下的子元素。可以用:   比如:   <div id="dom">     <div></div>     <div></div>     <div></div> </div>   var a = docuemnt.getElementById("dom").getElementsByTagName_r("div"); 這樣是沒有問題的   此時a.length=3;   但是我們現在換一種方法獲取就是我上章提到的var b = document.getElementByIdx_x("dom").childNodes;如果  這樣alert(b.length)IE浏覽器上沒問題還是3,但是在FF浏覽器上會提示是4,這就是因為FF把換行也當做一個元素了。 所以我們必須處理一下才能用JS的那些屬性。處理思想很簡單就是遍歷一下這些元素。把元素類型為空格而且是文本都刪除。處理函數是這樣的     復制代碼 代碼如下: function del_space(elem){     var elem_child = elem.childNodes;//得到參數元素的所有子元素     for(var i=0;i<elem_child.length;i++){ //遍歷子元素          if(elem_child.nodeName == "#text" && !/S/.test(elem_child.nodeValue)) {             elem.removeChild(elem_child)}           }    } }     上述函數遍歷子元素,當元素裡面有節點類型是文本並且該節點的節點值是空的。就把他刪除。   nodeNames可以得到一個節點的節點類型,/s/是非空字符在JS裡的正則表達式。前面加!,則表示是空字符   test() 方法用於檢測一個字符串是否匹配某個模式.語法是: RegExpObject.test(string)   如果字符串 string 中含有與 RegExpObject 匹配的文本,則返回 true,否則返回 false。   nodeValue表示得到這個節點裡的值。   removeChild則是刪除元素的子元素。   下面就是重點了啊!     復制代碼 代碼如下: <div id = "dom">           <div></div>            <div></div>       <div></div>   </div>   <script>    function dom(){       var a = document.getElementByIdx_x_x("dom");       del_space(a);調用清理空格的函數       var b = a.childNodes;獲取a的全部子節點;       var c = a.parentNode;獲取a的父節點;       var d = a.nextSbiling;獲取a的下一個兄弟節點       var e = a.previousSbiling;獲取a的上一個兄弟節點       var f = a.firstChild;獲取a的第一個子節點       var g = a.lastChild;獲取a的最後一個子節點 } </script>     下面介紹JQUERY的父,子,兄弟節點查找方法   jQuery.parent(expr) 找父親節點,可以傳入expr進行過濾,比如$("span").parent()或者$("span").parent(".class")   jQuery.parents(expr),類似於jQuery.parents(expr),但是是查找所有祖先元素,不限於父元素   jQuery.children(expr).返回所有子節點,這個方法只會返回直接的孩子節點,不會返回所有的子孫節點   jQuery.contents(),返回下面的所有內容,包括節點和文本。這個方法和children()的區別就在於,包括空白文本,也會被作為一個   jQuery對象返回,children()則只會返回節點   jQuery.prev(),返回上一個兄弟節點,不是所有的兄弟節點   jQuery.prevAll(),返回所有之前的兄弟節點   jQuery.next(),返回下一個兄弟節點,不是所有的兄弟節點   jQuery.nextAll(),返回所有之後的兄弟節點   jQuery.siblings(),返回兄弟姐妹節點,不分前後   jQuery.find(expr),跟jQuery.filter(expr)完全不一樣。jQuery.filter()是從初始的jQuery對象集合中篩選出一部分,而jQuery.find()   的返回結果,不會有初始集合中的內容,比如$("p"),find("span"),是從   p元素開始找,等同於$("p span")   ——————————————2014 1-9————————————————   上面是我從網絡所摘的解決js和jquery得到父子元素等的方法,但在解決的時候還是會產生問題:     復制代碼 代碼如下: <script type="text/javascript">     //JS解決   var dom=document.getElementById("dom");   //為了避免ff出現的問題,因此對子元素進行過濾處理   del_space(dom);   //1.獲取dom下的所有子節點   var a = dom.childNodes;//全部子節點;         var b = dom.parentNode;//父節點;         var e = dom.firstChild;//第一個子節點         var f = dom.lastChild;//最後一個子節點           //不知何原因,待日後研究 下一個兄弟節點和上一個兄弟節點都無法獲取的到...--!         var c = dom.nextSbiling.nodeType;//下一個兄弟節點         var d = dom.previousSbiling;//上一個兄弟節點          //jQuery解決    var a1 = $("#dom").children();//全部子節點;         var b2 = $("#dom").parent();//父節點;         var c3 = $("#dom").next();//下一個兄弟節點         var d4 = $("#dom").prev();//上一個兄弟節點        var e5 = $("#dom").children(":first");//第一個子節點         var f6 = $("#dom").children(":last");//最後一個子節點      /*    alert(a.length);    for(var i=0;i<a.length;i++){     alert(a[i].nodeName+":"+a[i].nodeValue+":"+/s/.test(a[i].nodeValue));    }    */     //ff下面會默認將你的換行當作dom元素,因此必須進行過濾處理,IE下不會產生類似問題   function del_space(elem){     var elem_child = elem.childNodes;//得到參數元素的所有子元素    for ( var i = 0; i < elem_child.length; i++) { //遍歷子元素      if (elem_child[i].nodeName == "#text") {       elem.removeChild(elem_child[i]);      }    }   }  </script>       js獲取節點 dom操作   接口  nodeType常量  nodeType值  備注   Element  Node.ELEMENT_NODE  1  元素節點   Text  Node.TEXT_NODE  3  文本節點   Document  Node.DOCUMENT_NODE  9  document   Comment  Node.COMMENT_NODE  8  注釋的文本   DocumentFragment  Node.DOCUMENT_FRAGMENT_NODE  11  document片斷   Attr  Node.ATTRIBUTE_NODE  2  節點屬性   方法  描述   createAttribute()  用指定的名字創建新的Attr節點。   createComment()  用指定的字符串創建新的Comment節點。   createElement()  用指定的標記名創建新的Element節點。   createTextNode()  用指定的文本創建新的TextNode節點。   getElementById()  返回文檔中具有指定id屬性的Element節點。   getElementsByTagName()  返回文檔中具有指定標記名的所有Element節點。   屬性  描述   attributes  如果該節點是一個Element,則以NamedNodeMap形式返回該元素的屬性。   childNodes  以Node[]的形式存放當前節點的子節點。如果沒有子節點,則返回空數組。   firstChild  以Node的形式返回當前節點的第一個子節點。如果沒有子節點,則為null。   lastChild  以Node的形式返回當前節點的最後一個子節點。如果沒有子節點,則為null。   nextSibling  以Node的形式返回當前節點的兄弟下一個節點。如果沒有這樣的節點,則返回null。下一個兄弟節點   nodeName  節點的名字,Element節點則代表Element的標記名稱。   nodeTy
copyright © 萬盛學電腦網 all rights reserved