使用来自指定根节点的JavaScript遍历DOM?

时间:2016-06-24 02:02:29

标签: javascript html asp.net dom

我是否可以使用例程或某些函数向我返回基于ID,标记名称或其他属性请求的元素但没有使用{{进行全局搜索1}}元素?

以下是我试图遍历的示例DOM ...

我在要用作起点的元素(btnAction输入控件)和我想要找到的元素(textarea)上放置了一个标记。寻找 [*]

document

基本上我要做的是从btnADDaction <table> <tr> <td align="center"> <div id="ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_upAction1"> <table> <tbody> <tr> <td style="vertical-align: middle; text-align: left"></td> </tr> <tr align="center"> <td colspan="1" style= "vertical-align: middle; text-align: center"> [*] <input tabindex="0" name= "ctl00$ContentPlaceHolder1$gvTETstudents$ctl06$btnADDaction" value="ADD" id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_btnADDaction" type="submit"> </td> </tr> <tr> <td colspan="1" style="text-align: center"> <div style= "display: none; position: fixed; z-index: 100001; left: 951.5px; top: 478.5px;" id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_upAction2"> <div id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_pnlACTION" class="pnlACTION"> <div id="divHDR"> <span id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_lblActionHdr"> Enter actions for Caine McClelland</span> </div> <div id="divBOD"> <table style="width: 98%; text-align:left"> <tbody> <tr> <td colspan="2"> Please enter action item:<br> [*] <textarea tabindex="0" name= "ctl00$ContentPlaceHolder1$gvTETstudents$ctl06$txtAction" rows="3" cols="20" id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_txtAction" style="width:98%;"> </textarea> <span id="ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_rfvAction" style="color:Red;visibility:hidden;">* Required</span> </td> </tr> <tr> <td colspan="2"> Select staff assigned to this task:<br> <select tabindex="0" name= "ctl00$ContentPlaceHolder1$gvTETstudents$ctl06$ddlActionStaff" id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_ddlActionStaff"> <option value="0"> Select... </option> <option value="TECNQ204"> Rob Connolly </option> <option value="TECNQ143"> Mary Elphick </option> <option value="TECNQ210"> Rebecca Edwards </option> <option value="TECNQ136"> Wayne Santo </option> </select> <span id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_rfvStaff" style= "display:inline-block;color:Red;width:98%;visibility:hidden;"> * Required</span> </td> </tr> <tr> <td colspan="2" style="text-align: center"> <input tabindex="0" name= "ctl00$ContentPlaceHolder1$gvTETstudents$ctl06$btnActionOK" value="OK" id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_btnActionOK" type="submit"> <input tabindex="0" name= "ctl00$ContentPlaceHolder1$gvTETstudents$ctl06$btnActionCANCEL" value="CANCEL" id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_btnActionCANCEL" type="submit"> </td> </tr> </tbody> </table> </div> </div> </div> <div class="modalBackground" style= "display: none; position: fixed; left: 0px; top: 0px; z-index: 10000; width: 1903px; height: 2986px;" id= "ctl00_ContentPlaceHolder1_gvTETstudents_ctl06_ajaxMPE_backgroundElement"> </div> </td> </tr> </tbody> </table> </div> </td> </tr> </table> 控件调用一个JavaScript函数(比如onclick =&#34; findme(this,&#39; txtAction&#39;)&#34; ),当然,将asp:Button作为按钮元素传递,但是通过ID传递一个相关的(在DOM树中的某个地方)元素,在这种情况下是&#34; txtAction&#34;来自this控件。

我当然试过asp:TextBox,但这是从DOM树的顶部开始的。如果我有另一个完全不相关的txtAction控件怎么办?

谢谢

3 个答案:

答案 0 :(得分:1)

如果您使用的是jQuery,则可以使用var title = document.body.getElementsByTagName('strong')[0] title.style.color = 'blue' title.style.display = 'block' var iframe = document.body.getElementsByTagName('iframe')[0] iframe.style.width = '100%' iframe.height = document.body.offsetHeight - title.offsetHeight ;

.closest()找到匹配选择器的第一个父项(遍历)。并且.find()返回匹配的子项(遍历)。

如果您不使用jquery并想尝试使用vanilla javascript,请检查此tutorial

答案 1 :(得分:1)

您正在寻找的JavaScript函数是getElementsByTagNamegetElementsByClassName;两者都可以基于父元素而不是library(data.table) library(ggplot2) library(dplyr) #setting colour for the range of values cpp$cutoff <- NA cpp$cutoff["A" <- cpp$mybs <= -0.1] <- "forestgreen" cpp$cutoff["B" <- cpp$mybs > -0.1 & cpp$mybs<= 0.1] <- "yellow1" cpp$cutoff["C" <- cpp$mybs > 0.1 & cpp$mybs<= 0.22] <- "slateblue2" cpp$cutoff["D" <- cpp$mybs > 0.22 & cpp$mybs<= 0.27] <- "navy" cpp$cutoff["E" <- cpp$mybs > 0.27 & cpp$mybs<= 0.46] <- "black" cpp$cutoff["F" <- cpp$mybs > 0.46 & cpp$mybs<= 0.56] <- "navy" cpp$cutoff["G" <- cpp$mybs > 0.56 & cpp$mybs<= 0.9] <- "red2" cpp$cutoff["H" <- cpp$mybs > 0.9 & cpp$mybs<= 1.25] <- "navy" cpp$cutoff["I" <- cpp$mybs > 1.25] <- "red2" ##plotting here p<- ggplot(cpp, aes(x = my_good, y = mybs, group = key, color = cutoff)) + geom_line() + geom_point() #to show the dots p1 <- p+labs(title="Threshold", x="Number wanted", y="mybs") + theme_bw() + theme(axis.text.x=element_text(size=14), axis.title.x=element_text(size=16), axis.text.y=element_text(size=14), axis.title.x=element_text(size=16), plot.title=element_text(size=20, face="bold", color="darkgreen")) p2 <-p1+ scale_x_continuous(expand = c(0, 0), breaks = c(0, 1500, seq(5000, max(as.data.frame(cpp[,"my_good"])), 10000)), labels = c(0, 1500, seq(5000, max(as.data.frame(cpp[,"my_good"])),10000))) #expand forces the origin to start at zero p #original plot 使用。但是,更难的部分是找到基于此搜索的祖先元素,这对jQuery的closest(…)方法很有用。

答案 2 :(得分:1)

您可能不需要jquery 。刚刚创建了一个基本的vanilla函数来获取与选择器匹配的第一个元素,方法是测试元素本身并遍历DOM树中的祖先。

/**
 * @param {HTMLElement} entry
 * @param {string} selector
 * @return {HTMLElement | null}
 */ 
function closest(entry, selector) {
  var parent = entry;
  var element = null;

  while (parent && !element) {
    element = parent.querySelector(selector);
    parent = parent.parentNode;
  }
  return element;
}

<强> USAGE

var entry = document.querySelector('input'); // your starting point. 
var textarea = closest(entry, 'textarea'); // <textarea>...</textarea>