Проверьте, есть ли у $ (this) родители, у которых в массиве указан класс или идентификатор - PullRequest
2 голосов
/ 16 февраля 2010

Прежде всего, после «тестирования», которое я должен сказать, StackOverflow действительно классный!

На мой вопрос: Я хочу проверить, имеет ли $ (this) , а не какие-либо родители, у которых есть класс или идентификатор, указанный в массиве js.

К настоящему времени я сделал это с «eval», но Энди Э. просто убедил меня, что лучше отказаться от «eval». Однако я понятия не имею, как это сделать в этом случае.

Вот многое из того, что я сделал:

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

Если кто-то достаточно любезен, чтобы ответить на мой вопрос, я должен извиниться, что не смогу прочитать (и прокомментировать, или оценить) его / ее ответ в течение следующих нескольких часов. К сожалению!

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Попробуйте, не нужно 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", "class2", "id1", "id2", но идентификаторы могут совпадать, как # class1 может совпадать, поэтому это менее желательно.

0 голосов
/ 16 февраля 2010

Ну, вы можете перебирать узлы за $ (это), если их больше одного, проверьте родителей, пройдя по дереву к каждому, кешируя любые пути, которые вы уже прошли, но на самом деле я думаю, что бы вы ни были пытаясь сделать здесь, вероятно, есть лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...