views:

69

answers:

2

I have some code like this:

if ($(event.target).is('.class1') || $(event.target).is('.blab') || $(event.target).is('.foo') || $(event.target).is('.cbncvbn') || $(event.target).is('.dfghdfgh') || $(event.target).is('.tryrty')) {
    // Do something
}

Is there a more succinct way to write this?

PS: I know there are better ways to do the same thing, but this question is about the syntax of the conditions.

Thanks.

+3  A: 

Well, jQuery uses CSS3 selectors you can just as well do this:

if ($(event.target).is('.class1, .blab, .foo, .cbncvbn, .dfghdfgh, .tryrty')) {
    // Do something
}

The match applies to any, as it does with CSS rules

John Leidegren
+1  A: 

In theory hasClass would be the most appropriate way to test whether an element has a given class name. However jQuery itself implements hasClass like this:

this.is( "." + selector )

which is not only just the same code in the end, but also breaks badly if you have a class name containing punctuation with a meaning in selectors. Bad jQuery, no cake!

So I'd stick with Paolo's answer. If performance is an issue the speed could be improved by using plain JavaScript to split the className list just once. But probably it won't matter in this case.

bobince