The .is() functionality you seek is in the latest SVN and according to
John 1.1.3 should be released this weekend.

--
Brandon Aaron

On 5/17/07, Gordon <[EMAIL PROTECTED]> wrote:

For part of a javascript I'm working on I need to process elements in
a HTML document but only if they are of a specific type or are not
contained within a specific type.  I wanted to use code as follows

$(html *).each
{
    if $(this).is ('a, h1, h2, h3') return
    // Processing goes here
}

I discovered that this could lead to problems if, for example there is
a <span> tag contained within an <a> tag (I know that isn't strictly
speaking legal HTML but I don't have any control over it.  It's
generated server side and I don't work with the scripts responsible
for that).  I ammeded my code thus:

$(html *).each
{
    if $(this).is ('a, h1, h2, h3') return;
    if $(this).parent ().is ('a, h1, h2, h3') return;
    // Processing goes here
}

I did experiment with $(this).parents () as well but discovered that
it was extremely slow.  Checking the immediate parent seems to be
sufficiant in my test cases.

However, I discovered that the ('a, h1, h2, h3') syntax didn't seem to
be working properly, it only seemed to be picking up my a tags and not
h1, h2, h3 or any other tags I tried checking for. I eventually
figured out that it only seems to be checking for the first element
type on the list.  This forced the following rewrite:

$(html *).each
{
    ignoreTheseTags = new Array ('a', 'h1', 'h2', 'h3');
    for (thisTag = 0; thisTag < ignoreTheseTags.length; thisTag++)
    {
        if $(this).is (ignoreTheseTags [thisTag]) return;
        if $(this).parent ().is (ignoreTheseTags [thisTag]) return;
    }
    // Processing goes here
}

which produces the results I want, but is EXTREMELY slow!

Is there some way to do this faster?  Can I pass a list directly to
the is() function and if so, how?  Or should I try a different
approach entirely?


Reply via email to