2016-11-22 66 views
0

我使用jQuery遍歷在DOM元素之間跳轉。jQuery遍歷。查找包括它自己的兄弟姐妹

的我第一次擁有的onClick功能:

$(document).on('keyup', '.size, .ant', function(){

在這個函數中我發送關於被點擊的東西,另一個函數的數據。

sulorTableRowWeight($(this)); 
function sulorTableRowWeight(thisobj){ 

現在,我想遍歷單擊元素$(this)到它的父項。我想找到父母的兄弟姐妹,然後往下走到一個特定的兄弟姐妹。

var inputSize = $(thisobj).parent().siblings('.sizeTd').children('.size');

我的問題是,當我要回落到我的,不列爲同級傳來元素遍歷,因爲它不是一個兄弟姐妹......

var inputSize = $(thisobj).parent().siblings(); console.log(inputSize)

控制檯會給我的兄弟姐妹,但不是一個U來自...

因此,當用戶點擊「。尺寸」我想遍歷到父母和回到大小... 。當用戶點擊「.ant」我想trav ERSE到父,然後下調至「.size」 ......

我試圖硬編碼的穿越:

var inputSize = $(thisobj).parent().siblings('.sizeTd').children('.size');

但它不會工作,因爲它並不是一個真正的兄弟。

那是什麼?我怎樣才能回到它呢?

如果這是不可能的,我必須運行一些if/else語句,U猜...

UPDATE

$(document).on('keyup', '.size, .ant', function(){ 
    //Find changed <select> .tbody 
    var tbodyId = $(this).parent().parent('tr').parent('tbody').attr('id'); 
    //Check <tbody> #id 
    if(tbodyId === "cpTableBody"){ 
    } 
    else if(tbodyId === "sulorTableBody"){ 
    sulorTableRowWeight($(this)); 
    } 
    else if(tbodyId === "konturTableBody"){ 
    konturTableRowWeight($(this)); 
    } 
    else if(tbodyId === "kantbalkTableBody"){ 
    kantbalkTableRowWeight($(this)); 
    } 
}) 

//Function sulorTableRowWeight 
function sulorTableRowWeight(thisobj){ 
    //Find the selected data-weight 
    var selectedWeightmm3 = $(thisobj).parent().siblings('.selectTd').children('.select').find(':selected').data('weightmm3'); 

    //Find input .size value 
    var inputSize = $(thisobj).parent().siblings('.sizeTd').children('.size'); console.log(inputSize) 

問題
我的VAR inputSize將返回undefined當我點擊一個「.size」元素。這是因爲它沒有被列爲自己的兄弟姐妹。

我知道這KEYUP,不要點擊...

+0

這是一個快速減去..請告訴我爲什麼請嗎? –

+0

我不確定我是否理解你的問題......但如果你想記住兄弟姐妹,你必須將它存儲在某個地方。如果父母有多個兄弟姐妹,那麼沒有明顯的辦法可以回到原來的兄弟姐妹身上。 – NutellaAddict

+0

@madalinivascu這個解釋是如何解釋的? –

回答

1

e.target將選擇當前輸入

$(document).on('keyup', '.size, .ant', function(e) { 
 
    inputSize = $(e.target); 
 
    if($(e.target).is('.ant')) {//test if the element is .ant 
 
    inputSize = $(e.target).parent().find('.size');//get .size based on .ant 
 
    } 
 
    console.log(inputSize[0]); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div> 
 
    <input class="size x1" placeholder="x1"> 
 
    <input class="ant x1" placeholder="x1 ant"> 
 
</div> 
 
<div> 
 
    <input class="size x2" placeholder="x2"> 
 
    <input class="ant x2" placeholder="x2 ant"> 
 
</div>

+0

Maby與此代碼..但不是與我..我無法訪問的兄弟姐妹「.sizeTd」,因爲它是我來到Frome ..,它不被列爲兄弟.. –

+0

更新我的答案,請提供解析的HTML,如果這不幫你 – madalinivascu

+0

e是你觸發的事件,這個代碼的工作? – madalinivascu

0

嗯,如果你在$(this)傳遞作爲thisObj我不認爲你需要在$()被嵌套thisObj。 (請參閱下面的註釋)

無論如何,你可以嘗試使用.parents('<grandparent>').find('<child>'),所以基本上你可以通過<grandparent>在樹上遍歷一個更高的層次,然後獲得與子選擇器匹配的所有後代。這應該包括$(this)所代表的三個分支。但很難說沒有看到你的HTML。

**好的做法時分配的jQuery對象變量是使用$語法,即var $this = $(this)所以你知道什麼用$前綴是一個jQuery對象。

0

sulorTableRowWeight,你應該在thisobj變量參考點擊的元素。