Попробуйте, не нужно 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 может совпадать, поэтому это менее желательно.