2014-03-19 127 views
0

我有下面的代碼我試圖確定一個元素的ID:如何獲取周圍元素的ID?

<li> 
<a class="selectTour" id="32"> 
    <span>Bla</span> 

    <div class="margin-top-2"><font style="white-space:normal; font-size: small">Test 22</font></div> 

    <p class="ui-li-aside"><strong>Created</strong> 
</a> 
</li> 

我不能用一個href元素,因爲使用的數據架構(Backbone.js的)的路由。我試圖函數綁定在selectTour類的話,我試圖通過一個事件監聽器,以獲得ID(順便說一句的selecTour出現n次):

selectTour:function(event) { 
      $.mobile.loading("show"); 
      var tour_id = event.target.id; 

      this.router.navigate("tour/" + tour_id, {trigger: true}) 
     }, 

的問題是,當用戶點擊(例如)在font元素(或a元素以外的其他元素)上返回錯誤的id。在我看來,這是一個標準的JavaScript/jQuery問題,但我無法弄清楚,需要推進到正確的方向。

+0

不要你只是想'this.parentNode.parentNode.id'在font-element的onclick函數? – GitaarLAB

+0

感謝您的回覆,但這裏的問題在於用戶並不總是單擊字體元素。 –

+0

你的問題並不清楚,它的標題,你可能想澄清。你問周圍一個元素*的* id,並且你的文本說明你可以用類'selectTour'和*附加一個事件,當用戶點擊font元素時,返回錯誤的id *。我很困惑... ...爲什麼不添加一個onclick事件錨定與類'selectTour'和在這個函數內使用'this.id'? – GitaarLAB

回答

1

我想你應該改變你的腳本一點是這樣的:

var tour_id = ($(event.target)[0].id.length) ? $(event.target)[0].id : $(event.target).closest('a.selectTour')[0].id; 

因爲你event.target元素並不總是selectTour它確實是這樣不會讓你知道它的身份,所以相反,如果你使用jQuery,你可以檢查id的長度,如果可以的話分配它的id,否則如果event.target不是selectTour,那麼遍歷到selectTour.closest()獲得並分配id到var tour_id


使用jQuery的.attr()

var tour_id = ($(event.target).attr('id').length) ? $(event.target).attr('id') : $(event.target).closest('a.selectTour').attr('id'); 
+0

這也適用於我,似乎也更加防彈。比阿倫的回答 - 你會同意嗎? –

+0

如果你問我,那麼我會說這是必須的。 – Jai

+0

這就是我剛剛做的。 ;) –

3

您可以使用.closest()查找最接近的點擊目標的selectTour元素,然後使用.attr()來獲取其ID。

selectTour: function (event) { 
    $.mobile.loading("show"); 
    var tour_id = $(event.target).closest('.selectTour').attr('id'); 

    this.router.navigate("tour/" + tour_id, { 
     trigger: true 
    }) 
}, 

你甚至可以嘗試e.currentTarget.id如果點擊處理器瞄準的是selectTour元素。

+0

讓我的一天 - 非常感謝。 –

0

這件事給了我32,我認爲是正確的

$('.selectTour').bind('click',function(e){ 
    alert($(this).attr('id')); 
}); 
+0

謝謝你的回覆,但選擇出現n次。 –

+0

http://jsfiddle.net/AmarnathRShenoy/tq9Gy/ –

+0

這是你在找什麼 –