Perfect!

Maybe JR can make this into a .notAll() function in 1.2.1.1.1.1.1 :-)

Thanks Brandon!

--
HLS

On Sep 22, 8:34 pm, "Brandon Aaron" <[EMAIL PROTECTED]> wrote:
> Oh okay... So, the code is working, it matches only the DIV and appends that
> DIV. However, that DIV still contains the other elements. The .not method
> doesn't actually remove elements from the DOM just from the jQuery
> collection. I can see how this can be confusing for what you are trying to
> achieve. Instead of using .not try using .filter and passing in a function.
> Maybe like this:
>
> s = $(s)
>         .find('*').andSelf()
>             .filter( function() {
>                 var $this = $(this);
>                 if ( $this.is('script, hr, img') ) {
>                     // remove the element from the DOM
>                     $this.remove();
>                     // remove the element from the jQuery collection
>                     return false;
>                 }
>                 // Otherwise keep the element in the jQuery collection
>                 return true;
>             });
>
> Hope that helps! :)
>
> --
> Brandon Aaron
>
> On 9/22/07, Pops <[EMAIL PROTECTED]> wrote:
>
>
>
> > Hi Brandon,
>
> > Let me try this ....
>
> > I'm not seeing it work.  Here is my test code. I tried all 3 methods:
>
> > <html>
> > <head>
> > <script type='text/javascript' src='/public/js/jquery-1.2.1.js'></
> > script>
> > <script>
> > //<!--
> > function testFilter()
> > {
> >   var s = "";
> >   s += "<script>$('body').append('<button>foobar1</button>');</
> > script>";
> >   s += "<hr style='background: yellow; height: 10px;'/>";
> >   s += "<img src='http://www.santronics.com/images/
> > WINSbox-120x120.gif'/>";
> >   s += "<div style='border: 2px solid silver;'>";
> >   s += "Hi there!";
> >   s += "<img src='http://www.santronics.com/images/
> > WINSbox-120x120.gif'/>";
> >   s += "<hr style='background: green; height: 10px;'/>";
> >   s += "<script>$('body').append('<button>foobar2</button>');</
> > script>";
> >   s += "</div>";
> >   s += "<img src='http://www.santronics.com/images/
> > WINSbox-120x120.gif'/>";
> >   s += "<hr style='background: cyan; height: 10px;'/>";
> >   s += "<script>$('body').append('<button>foobar3</button>');</
> > script>";
>
> >   //s = $(s).not('script, hr, img');
> >   //s = $('*',s).andSelf().not('script, hr, img');
> >   s = $('*',s).add(s).not('script, hr, img');
> >   $("#wcResult").html(s);
> > }
> > //-->
> > </script>
>
> > </head>
> > <body>
>
> > <button onclick="testFilter();">test filter</button>
>
> > <div id="wcResult" style="padding: 10px; border: 1px solid black;">
> > </div>
> > </body>
> > </html>
>
> > With all methods,  the top and bottom elements are filtered, but the
> > elements within the <div> remain.
>
> > What am I missing?
>
> > BTW, for this real case scenario, my workaround is to use .text(), but
> > I will need to give people the option to some minimum secured html.
>
> > --
> > HLS
>
> > On Sep 22, 1:39 pm, "Brandon Aaron" <[EMAIL PROTECTED]> wrote:
> > > The .not and .filter methods only run against the matched elements
> > within
> > > the jQuery collection. In order to filter all elements you will need to
> > add
> > > all elements to the collection. I think something like this should work
> > > (untested).
>
> > > $('*', data).andSelf().not('style, meta, link, script, title, img');
>
> > > andSelf is a jQuery 1.2 method. If you are using an earlier version you
> > > could use $('*', data).add(data)
>
> > > --
> > > Brandon Aaron
>
> > > On 9/22/07, Pops <[EMAIL PROTECTED]> wrote:
>
> > > > I noticed some example using something like so:
>
> > > >   data = $(data).not("style, meta, link, script, title");
>
> > > > to filter out thes tags.
>
> > > > I tried using this to filter img as well:
>
> > > >   data = $(data).not("style, meta, link, script, title, img");
>
> > > > and what  I noticed is that this doesn't work if the elements are
> > > > within other elements.
>
> > > > For example, I have this simple example:
>
> > > >   <img src="1">
> > > >   <div>
> > > >      <img src="2">
> > > >   </div>
> > > >   <img src="3">
>
> > > > In this case, only img 1 and 3 will be filtered out. img 2 will
> > > > remain.
>
> > > > I am wondering if that is proper behavior for .not(elements)?
>
> > > > My goal is to filter all elements regardless of node or branch
> > > > depth.
>
> > > > Thanks
>
> > > > --
> > > > HLS

Reply via email to