2010-02-16 40 views
2

首先,「測試」一段時間後,我不得不說,stackoverflow真的很酷!

我的問題: 我要檢查,如果$(本)具有有在JS數組中指定一個類或ID的父母。

現在我用「eval」做了這個,但是Andy E.只是說服了我,放棄「eval」更好。不過,我不知道如何在這種情況下做到這一點。

這是相當多的我所做的:

var testthis = '!(($(this).parents("'+<MY_ARRAY>.join('").length > 0 || $(this).parents("')+'").length > 0)'; 
if (eval(testthis)) { 
    .... 
} 

如果有人是一種足以回答我的問題,我必須appologize,我不能在閱讀(評論或利率)他/她的回答接下來幾個小時。抱歉!

+1

+1對於喜歡SO。但是,正如你已經看到的,你幾乎不應該使用'eval',尤其是如果你對語言不熟悉的話。 –

+0

謝謝+1,但是這意味着什麼?我剛剛找到「重要的其他」;-) – speendo

回答

2

試試這個,沒有EVAL需要:

if(!$(this).parents(<MY_ARRAY>.join(', ')).length) { 
//elem has none of those parents 
} 

MY_ARRY在這種情況下,包含了諸如 「.class1" ,」 .class2" , 「#ID1」, 「#ID2」

或者慢的東西但是喲可以檢查這兩種情況下,如果數組只是字符串:

if(!$(this).parents("." + <MY_ARRAY>.join(', .')).length && 
    !$(this).parents("#" + <MY_ARRAY>.join(', #')).length) { 
//elem has none of those parents 
} 

MY_ARRY在這種情況下,包括像「class1的」,「等級2」,「ID1」,「ID2」,但標識可以匹配像# class1可以匹配,所以這是l令人滿意。

+1

爲什麼要將引號添加到選擇器中?假設數組的元素已經預置了「#」或「。」如果合適,它應該是'theArray.join(',')'。這將是一個字符串,而字符串就是選擇器。 – Pointy

+0

@Pointy - 我明白你的意思了,上面縮短了,謝謝! –

+0

感謝您的回答!這似乎很棒,但是我沒有可能測試它。只要我測試它,我會立即將您的答案標記爲已接受。謝謝! – speendo

0

那麼你可以遍歷$(這個)的節點,假設有多個節點,檢查父母走到樹的每一個,緩存你已經走過的任何路徑,但我真的認爲無論你正試圖在這裏做,可能有更好的方法。

相關問題