2012-09-23 73 views
1

我的问题听起来很简单。我有没有这样的如何通过触发函数的元素的父div的classname获取另一个子元素

<div style="position:relative; float:left"> 
    <input type="text" onfocus="renderCalendar(event);" size="50" id="cal" name="cal"> 
    <div class="wrappercal calwrapper"> 
     <div class="yearmonth"> 
      <table class="caltable"><tbody> 
      <tr><th width="80%" scope="col" colspan="5"> 
       <select class="dtcombo year" onchange="changeCalendar()"> 
        <option value="2000">2000</option> 
        <option value="2001">2001</option> 
       </select>&nbsp;&nbsp; 
       <select onchange="changeCalendar()" class="dtcombo month"> 
        <option value="1">1</option> 
        <option value="2">2</option> 
       </select></th> 
       </tr> 
       </tbody> 
       </table> 
     </div> 
    </div> 
</div> 

指定的id和class的div可能有几个类似的div在页面

我有一个JavaScript函数

function renderCalendar(event){ 
    var triggerer=event.target.id; // THIS WILL GIVE THE ID OF TEXTBOX THAT TRIGGERED THIS FUNCTION. 
    $("#"+triggerer).parent().children(".wrappercal").children(".yearmonth").children(".caltable").children(".year").val(); //not working 
} 

巢遵循这样

Parent Div > wrappercal(div) > yearmonth(div) > caltable(table) > year(select) 

我的问题是要获得文本的父div的类“年”的组合值触发该功能的框。

任何人都可以找出我出错的地方吗?有什么建议么?

P.S.请承担我对dom元素的不好。

谢谢

+1

尝试.parent()。找到( “类名”),其简单的一个 –

+0

@RegisteredUser,我还以为,但不是比我尝试的那个慢。 – WatsMyName

+0

@RegisteredUser,我想我应该用'find'去,速度似乎可以忽略不计。 – WatsMyName

回答

2

为什么不试试这个?

function renderCalendar(event){ 
    $(event.target).parent().find(".wrappercal .yearmonth .caltable .year").val(); 
} 

你可以检查(使用console.log(event.target)和跟踪),目标元素是真的,它应该是什么/?

编辑

问题是children()只有通过子节点的一个水平(深)进行搜索,并有.caltable.year<tr><th>...)之间的多个级别。改为使用find()(它将通过您的节点递归搜索)。 ;-)

有关更多信息,请参阅this

+0

谢谢我认为我应该去'find' – WatsMyName

1

请尝试以下

  function renderCalendaer(event) { 

      $("#"+event.target.id).parent().find(".year").val(); 

        } 
1

您可以尝试

$("#"+triggerer).parent().find(".year").val() instead. 
相关问题