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

首頁 > 編程 > JavaScript > 正文

javascript中的previousSibling和nextSibling的正確用法

2019-11-20 11:33:34
字體:
供稿:網(wǎng)友

我做的時(shí)間的驗(yàn)證,格式是不需要驗(yàn)證的,只需要驗(yàn)證起始日期與結(jié)束日期的大小,但是因?yàn)檩斎腠撁媸桥康模颐恳恍杏质亲詣?dòng)生成的,這樣就不能用id來作為參數(shù),只能用節(jié)點(diǎn)。這就給驗(yàn)證增加了難度。

    以下是jsp頁面的部分:

<td><input id="warrantyStartDateStr" name="warrantyStartDateStr"         class="toolbar_button_input_80" type="Text" onClick="WdatePicker()"></td><td><input id="warrantyEndDateStr" name="warrantyEndDateStr" class="toolbar_button_input_80" type="Text" onClick="WdatePicker()" onBlur="checkDateOne(this)"></td>

而我的js函數(shù)最終是這樣寫的:

   js函數(shù)的目的就是不通過id,卻能夠獲得兩個(gè)input的value,即起始時(shí)間和結(jié)束時(shí)間,然后比較兩個(gè)時(shí)間的大小。

function checkDateOne(inputsNode){var p = inputsNode.parentNode; //取得input節(jié)點(diǎn)的父節(jié)點(diǎn)tdvar preNode=p.previousSibling.firstChild;//取得td節(jié)點(diǎn)的前一個(gè)兄弟節(jié)點(diǎn)的第一個(gè)子結(jié)點(diǎn)var startDate = document.getElementByIdx_x(preNode.id).value;var endDate = document.getElementByIdx_x(inputsNode.id).value;      if(startDate.length>0 && endDate.length>0){    var startTmp=startDate.split("-");  var endTmp=endDate.split("-");  var sd=new Date(startTmp[0],startTmp[1],startTmp[2]);  var ed=new Date(endTmp[0],endTmp[1],endTmp[2]);  if(sd.getDate()>=ed.getDate()){    alert("起始日期不能大于結(jié)束日期");      //return false;     }     } }

首先是取得當(dāng)前節(jié)點(diǎn)input節(jié)點(diǎn)的父節(jié)點(diǎn)p(即td節(jié)點(diǎn)),然后再取得父節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)的第一個(gè)子結(jié)點(diǎn)input。這樣就達(dá)到了目的。

      這里想強(qiáng)調(diào)的是,不要忘記td節(jié)點(diǎn)是input節(jié)點(diǎn)的父節(jié)點(diǎn),不能當(dāng)成是它的兄弟節(jié)點(diǎn)。

另外還想說:previousSibling和nextSibling在IE和FF之間的差異:

  先來看一個(gè)例子:

<body>  <div>  <input id= "a4" type= "button" onclick= "alert(this.nextSibling);" value= "d" />  <input id= "a5" type= "button" onclick= "alert(this.nextSibling);" value= "e" />  </div>  </body> 

      該對象的結(jié)構(gòu)表面上看,div的nextSibling只有2項(xiàng)――兩個(gè)input節(jié)點(diǎn)。但實(shí)際上有5項(xiàng)――/n,input,/n,input,/n。這是因?yàn)閕nput作為創(chuàng)建各種表單輸入控件的標(biāo)簽,無論是生成button、checkbox、radio...等或其他表單控件,IE都會(huì)自動(dòng)在后面創(chuàng)建一個(gè)1字節(jié)位的空白。

       IE將跳過在節(jié)點(diǎn)之間產(chǎn)生的空格文檔節(jié)點(diǎn)(如:換行字符),而Mozilla不會(huì)這樣――FF會(huì)把諸如空格換行之類的排版元素視作節(jié)點(diǎn)讀取,因此,在ie 中用nextSibling便可讀取到的下一個(gè)節(jié)點(diǎn)元素,在FF中就需要這樣寫:nextSibling.nextSibling了。

     previousSibling的作用正好相反,但是用法也是同樣的道理!

nextSibling和previousSibling介紹

在FireFox中包含眾多空格作為文本節(jié)點(diǎn),因此在我們使用nextSibling和previousSibling時(shí)就會(huì)出現(xiàn)問題。因?yàn)镕ireFox會(huì)把文本節(jié)點(diǎn)誤當(dāng)做元素節(jié)點(diǎn)的兄弟節(jié)點(diǎn)來處理。我們可以添加nodeType來判斷。當(dāng)上一節(jié)點(diǎn)或者是下一節(jié)點(diǎn)為文本節(jié)點(diǎn)時(shí),就繼續(xù)尋找,直到找到下一個(gè)元素節(jié)點(diǎn)。以下代碼僅供參考,在fireFox中測試通過:

        //下一個(gè)兄弟節(jié)點(diǎn)    function nextSibling(node) {      var tempLast = node.parentNode.lastChild;      if (node == tempLast) return null;      var tempObj = node.nextSibling;      while (tempObj.nodeType != 1 && tempObj.nextSibling != null) {        tempObj = tempObj.nextSibling;      }      return (tempObj.nodeType==1)? tempObj:null;    }    //前一個(gè)兄弟節(jié)點(diǎn)    function prevSibling(node) {      var tempFirst = node.parentNode.firstChild;      if (node == tempFirst) return null;      var tempObj = node.previousSibling;      while (tempObj.nodeType != 1 && tempObj.previousSibling != null) {        tempObj = tempObj.previousSibling;      }      return (tempObj.nodeType==1)? tempObj:null;    }  <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">  <title></title>  <script type="text/javascript" language="javascript" >    window.onload = function () {      var oUl = document.getElementsByTagName("UL");      var nodeLi = oUl[0].childNodes[3];      var nextListItem = nodeLi.nextSibling;      var preListItem = nodeLi.previousSibling;      alert(nextListItem.tagName + " " + preListItem.tagName);      nextListItem = nextSibling(nodeLi);      preListItem = prevSibling(nodeLi);      alert(nextListItem.tagName + " " + preListItem.tagName);    }    //下一個(gè)兄弟節(jié)點(diǎn)    function nextSibling(node) {      var tempLast = node.parentNode.lastChild;      if (node == tempLast) return null;      var tempObj = node.nextSibling;      while (tempObj.nodeType != 1 && tempObj.nextSibling != null) {        tempObj = tempObj.nextSibling;      }      return (tempObj.nodeType==1)? tempObj:null;    }    //前一個(gè)兄弟節(jié)點(diǎn)    function prevSibling(node) {      var tempFirst = node.parentNode.firstChild;      if (node == tempFirst) return null;      var tempObj = node.previousSibling;      while (tempObj.nodeType != 1 && tempObj.previousSibling != null) {        tempObj = tempObj.previousSibling;      }      return (tempObj.nodeType==1)? tempObj:null;    }    </script></head><body>  <form id="form1" runat="server">  <div>    <ul>      <li>HTML</li>      <li>CSS</li>      <li>JavaScript</li>      <li>JQuery</li>      <li>Dom</li>    </ul>    <ul>      <li>ASP.NET</li>      <li>JSP</li>      <li>PHP</li>      <li>VB.NET</li>    </ul>  </div>  </form></body></html>

其中nodeType的值主要有以下幾種:

元素節(jié)點(diǎn)的nodeType值為1
屬性節(jié)點(diǎn)的nodeType值為2
文本節(jié)點(diǎn)的nodeType值為3

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿坝| 金华市| 陇西县| 崇明县| 宕昌县| 大埔区| 廉江市| 疏附县| 神木县| 昌乐县| 西乡县| 弥渡县| 六枝特区| 阳谷县| 襄垣县| 通榆县| 岐山县| 印江| 庄浪县| 嘉祥县| 航空| 称多县| 蒙阴县| 嫩江县| 阿拉善左旗| 彰化县| 江城| 石首市| 临高县| 兰考县| 柯坪县| 台南县| 当阳市| 平潭县| 乌海市| 怀柔区| 望都县| 商南县| 基隆市| 连江县| 余庆县|