Unfortunately, the text method by default returns the text of the element
and all its children (not just on lists but all types of elements).

This is similar to the IE method innerText.  It's a bit roundabout, but
maybe you could grab the innerHTML and then regex out the child contents.

Regex doesn't handle nested elements very well, but if you remove the LIs
first then the ULs it seems to work.  Here is a sample:

$(document).ready(function()
{
  $('li').each(function(i)
    {
          var html = $(this).html();
          var text =
html.replace(/<li[\s\S]+?<\/li>/gi,'').replace(/<ul[\s\S]+?<\/ul>/gi,'');
          alert(text);
    });
});

It worked on my test page, but I'm not sure if it will handle multiple
levels of nested lists properly.

If you're sure that your content will never have any brackets in it, you
could you this real greedy regex instead:

          var text = html.replace(/<[\s\S]+>/gi,'');

JK

-----Original Message-----
From: jquery-en@googlegroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of Andy Matthews
Sent: Friday, November 02, 2007 9:52 AM
To: jquery-en@googlegroups.com
Subject: [jQuery] Re: select text for LI


Isn't that invalid HTML? Should it be this instead?

<ul>
  <li>index.html</li>
  <li>about</li>
  <ul>
    <li>index.html</li>
    <li>more.html</li>
  </ul>
</ul> 

-----Original Message-----
From: jquery-en@googlegroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of sawmac
Sent: Friday, November 02, 2007 10:55 AM
To: jQuery (English)
Subject: [jQuery] select text for LI


I'm trying to select text inside list items. I'm using jQuery's .text( )
method. Unfortunately, that returns the text of all children as well. That
means for a nested list like this

<ul>
  <li>index.html</li>
  <li>about
    <ul>
      <li>index.html</li>
      <li>more.html</li>
    </ul>
  </li>
</ul>

$('li').eq(1).text() returns
'about
   index.html
   more.html'

I just want to retrieve "about" not the text from the child list items. Any
ideas on how to do that?

thanks



Reply via email to