2013-09-29 50 views
0

我是jQuery的新手,如果我的詞彙表錯誤,請道歉,請糾正我,以便我可以學習正確的方法。將選擇器添加到已存儲在變量中的對象

我在嘗試使用最佳實踐來優化性能。我被告知儘可能將靜態對象存儲在一個變量中。我試圖存儲父對象#mytable,然後從那裏導航到子對象。

var count=1; 
$('#eachselector').each(function(){ 

    var MyTable = $('#mytable'+count); 
    $(MyTable+' td[condition=true][condition2=true]').attr('do', 'stuff'); 
    $(MyTable+' table[condition=true][condition2=true]').attr('do', 'stuff'); 

    count++; 
}); 

這給我錯誤「未捕獲的異常:語法錯誤,無法識別的表達式:[object object]」。

我懷疑我將MyTable作爲一個字符串在each()中調用時但不知道語法應該是什麼樣子。

謝謝!

+0

您將字符串到一個jQuery對象(myTable的)。 –

回答

3

使用這個代替:

var MyTable = $('#mytable'+count); 
MyTable.find('td[condition=true][condition2=true]').attr('do', 'stuff'); 
MyTable.find('table[condition=true][condition2=true]').attr('do', 'stuff'); 

這使用jQuery的.find()功能來搜索的$('#mytable'+count)後裔。你的代碼不工作的原因是MyTable是一個jQuery對象而不是一個字符串。

您也可以使用$('selector', MyTable),但內部它只映射到.find()函數。

+0

這是偉大的喬,測試和完美的作品。但是,爲了學習,是否有可能像我試圖做的那樣將其他選擇器直接連接到變量上? 我認爲這是因爲我把它當作一個字符串而不是對象。那是對的嗎? – Joe

+0

@Joe - 沒問題。這是不可能的,因爲'myTable'是一個對象,但你試圖連接它,就像它是一個字符串。例如,這可以工作:'$('#mytable'+ count +'td [condition = true] [condition2 = true]')'因爲你只是串聯字符串。但是,這樣做更混亂,不太優化。要更詳細地查看'MyTable',請在定義它之後使用'console.log(MyTable);'然後使用瀏覽器的開發人員工具查看它。 – Joe

+0

非常好。事實上,'$('#mytable'+ count +'td [condition = true] [condition2 = true]')'是我原來的代碼草稿,然後我想回去實現一個更好的方法。 非常感謝喬非常有幫助! – Joe

0

使用下面的代碼:

$('td[condition=true][condition2=true]', MyTable).attr('do', 'stuff'); 

這是說一套「做」的所有TD的屬性與條件1和條件2爲真價值「東西」

相關問題