Re: [jQuery] Parent and Single Parent Element Selection

2007-03-05 Thread Seb Duggan
Maybe something like:


$('.colorPick').change(function() {
$(this).parent().parent().addClass('assigned');
});


where colorPick is the class assigned to your select menu.

You could also use:


$('.colorPick').change(function() {
$(this).parents('tr').addClass('assigned');
});


but my gut tells me that's not quite as efficient, as it will look  
for 'tr' elements all the way up to the top of the DOM tree.


Seb



On 5 Mar 2007, at 17:09, Kevin Fricovsky wrote:

>
> Morning,
>
> I have a question for the jquery group.
>
> My question is - what's the best way to get a single parent element of
> the current object.
>
> Right now I have an html table with multiple rows. In the first TD of
> each row I have a select list (a dropdown).
>
> I have a select() event attached to the option list and when the user
> selects an option the background color for that row (TR) is changed.
> (well, actually all TR backgrounds are changing right now that's  
> why I'm
> writing everyone).
>
> So, the only problem I'm having is getting the single parent TR.
>
> Right now my update statement is updating every TR in the table versus
> just the parent.
>
> The code is something like this:
>
> $("../../../../tr",this).addClass("assigned");
>
> The "this" is the select element.
>
> Even if I do use an indexer on this statement like this $(...)[0] -  
> the
> problem there is the system currently doesn't know the index of the  
> row
> it's on.
>
> So I can either add the index in a hidden value or I thought maybe
> there's an easier way of doing this via JQuery.
>
> Thx for your help.
>
>
> ___
> jQuery mailing list
> discuss@jquery.com
> http://jquery.com/discuss/



___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] Parent and Single Parent Element Selection

2007-03-05 Thread Choan C. Gálvez
On 3/5/07, Kevin Fricovsky <[EMAIL PROTECTED]> wrote:
>
> Morning,

Evening ;)

> I have a question for the jquery group.
>
> My question is - what's the best way to get a single parent element of
> the current object.
>
> Right now I have an html table with multiple rows. In the first TD of
> each row I have a select list (a dropdown).
>
> I have a select() event attached to the option list and when the user
> selects an option the background color for that row (TR) is changed.
> (well, actually all TR backgrounds are changing right now that's why I'm
> writing everyone).
>
> So, the only problem I'm having is getting the single parent TR.
>
> Right now my update statement is updating every TR in the table versus
> just the parent.
>
> The code is something like this:
>
> $("../../../../tr",this).addClass("assigned");
>
> The "this" is the select element.
>
> Even if I do use an indexer on this statement like this $(...)[0] - the
> problem there is the system currently doesn't know the index of the row
> it's on.
>
> So I can either add the index in a hidden value or I thought maybe
> there's an easier way of doing this via JQuery.

There is.

$(this).parent("tr").addClass("assigned");



-- 
Choan


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] Parent Selection Problem

2007-02-16 Thread Mahadewa

Guys, the codes work now !

Thanks a lot for the help !

Chris


Karl Swedberg-2 wrote:
> 
> Are you sure? Maybe the problem is with "source.id"
> 
> I put your HTML into a page and ran this code (on document ready):
> 
> $('input').click(function() {
>var parentId = $(this).parents('div.parent')[0].id;
>alert(parentId);
> });
> 
> When I clicked the first button, the alert read "parent1"
> When I clicked the second, the alert read "parent2"
> 
> If that isn't what you're expecting, maybe I'm misunderstanding what  
> you're trying to do.
> 
> 
> --Karl
> _
> Karl Swedberg
> www.englishrules.com
> www.learningjquery.com
> 
> 
> 
> On Feb 15, 2007, at 12:02 PM, Mahadewa wrote:
> 
>>
>> This doesn't do it for me.  I got the Button itself as a result.
>>
>> var parent = $(this).parents('div.parent');
>>
>> Is this not the same as to say: "Select element (of 'this') which  
>> parent is
>> 'div.parent' " ?
>>
>> I think I need the other-way around, don't I ?
>> Something like ... "Get me the element, which class is 'parent',  
>> which has
>> 'this' children.
>>
>> Chris
>>
>>
>> Karl Swedberg-2 wrote:
>>>
>>> On Feb 15, 2007, at 11:01 AM, Mahadewa wrote:
>>>
 // This function is wired to the above buttons' onclick event,
 passing
 'this' as an argument
 function OnButtonClick(source)
 {
 var parent = $(".parent").children(source.id);
 }
>>>
>>> Hi Chris,
>>>
>>>   you should be able to do it this way:
>>>
>>> var parent = $(this).parents('div.parent');
>>>
>>>
>>>
>>> --Karl
>>> _
>>> Karl Swedberg
>>> www.englishrules.com
>>> www.learningjquery.com
>>>
>>>
>>>
>>> On Feb 15, 2007, at 11:01 AM, Mahadewa wrote:
>>>

 Hi all,

 I've got the following problem ...

 Let's say I have the following html:

 
 
 >>> type="button"
 value="button" />
 
 
 
 
 >>> type="button"
 value="button" />
 
 

 Now given a JQuery object of any of the button, how can I select
 its parent
 div (the one with the class "parent") ?

 I have tried the following, but it doesn't seem to yield the
 correct object:

 // This function is wired to the above buttons' onclick event,
 passing
 'this' as an argument
 function OnButtonClick(source)
 {
 var parent = $(".parent").children(source.id);
 }

 Thanks a lot !
 Chris
 -- 
 View this message in context: http://www.nabble.com/Parent-
 Selection-Problem-tf3234532.html#a8987992
 Sent from the JQuery mailing list archive at Nabble.com.


 ___
 jQuery mailing list
 discuss@jquery.com
 http://jquery.com/discuss/
>>>
>>>
>>> ___
>>> jQuery mailing list
>>> discuss@jquery.com
>>> http://jquery.com/discuss/
>>>
>>>
>>
>> -- 
>> View this message in context: http://www.nabble.com/Parent- 
>> Selection-Problem-tf3234532.html#a8989357
>> Sent from the JQuery mailing list archive at Nabble.com.
>>
>>
>> ___
>> jQuery mailing list
>> discuss@jquery.com
>> http://jquery.com/discuss/
> 
> 
> ___
> jQuery mailing list
> discuss@jquery.com
> http://jquery.com/discuss/
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Parent-Selection-Problem-tf3234532.html#a9001081
Sent from the JQuery mailing list archive at Nabble.com.


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] Parent Selection Problem

2007-02-15 Thread Jonathan Chaffer
On Feb 15, 2007, at 12:02 , Mahadewa wrote:

> var parent = $(this).parents('div.parent');
>
> Is this not the same as to say: "Select element (of 'this') which  
> parent is
> 'div.parent' " ?

Nope, not the same. The way to read this is:
   - Wrap the DOM element "this" in a jQuery object.
   - Find all parents of the element that match "div.parent".

--
Jonathan Chaffer
Technology Officer, Structure Interactive
(616) 364-7423http://www.structureinteractive.com/



___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] Parent Selection Problem

2007-02-15 Thread Karl Swedberg

Are you sure? Maybe the problem is with "source.id"

I put your HTML into a page and ran this code (on document ready):

$('input').click(function() {
  var parentId = $(this).parents('div.parent')[0].id;
  alert(parentId);
});

When I clicked the first button, the alert read "parent1"
When I clicked the second, the alert read "parent2"

If that isn't what you're expecting, maybe I'm misunderstanding what  
you're trying to do.



--Karl
_
Karl Swedberg
www.englishrules.com
www.learningjquery.com



On Feb 15, 2007, at 12:02 PM, Mahadewa wrote:



This doesn't do it for me.  I got the Button itself as a result.

var parent = $(this).parents('div.parent');

Is this not the same as to say: "Select element (of 'this') which  
parent is

'div.parent' " ?

I think I need the other-way around, don't I ?
Something like ... "Get me the element, which class is 'parent',  
which has

'this' children.

Chris


Karl Swedberg-2 wrote:


On Feb 15, 2007, at 11:01 AM, Mahadewa wrote:


// This function is wired to the above buttons' onclick event,
passing
'this' as an argument
function OnButtonClick(source)
{
var parent = $(".parent").children(source.id);
}


Hi Chris,

  you should be able to do it this way:

var parent = $(this).parents('div.parent');



--Karl
_
Karl Swedberg
www.englishrules.com
www.learningjquery.com



On Feb 15, 2007, at 11:01 AM, Mahadewa wrote:



Hi all,

I've got the following problem ...

Let's say I have the following html:



type="button"

value="button" />




type="button"

value="button" />



Now given a JQuery object of any of the button, how can I select
its parent
div (the one with the class "parent") ?

I have tried the following, but it doesn't seem to yield the
correct object:

// This function is wired to the above buttons' onclick event,
passing
'this' as an argument
function OnButtonClick(source)
{
var parent = $(".parent").children(source.id);
}

Thanks a lot !
Chris
--
View this message in context: http://www.nabble.com/Parent-
Selection-Problem-tf3234532.html#a8987992
Sent from the JQuery mailing list archive at Nabble.com.


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/



___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/




--
View this message in context: http://www.nabble.com/Parent- 
Selection-Problem-tf3234532.html#a8989357

Sent from the JQuery mailing list archive at Nabble.com.


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] Parent Selection Problem

2007-02-15 Thread Mahadewa

This doesn't do it for me.  I got the Button itself as a result.

var parent = $(this).parents('div.parent');

Is this not the same as to say: "Select element (of 'this') which parent is
'div.parent' " ?

I think I need the other-way around, don't I ?
Something like ... "Get me the element, which class is 'parent', which has
'this' children.

Chris


Karl Swedberg-2 wrote:
> 
> On Feb 15, 2007, at 11:01 AM, Mahadewa wrote:
> 
>> // This function is wired to the above buttons' onclick event,  
>> passing
>> 'this' as an argument
>> function OnButtonClick(source)
>> {
>> var parent = $(".parent").children(source.id);
>> }
> 
> Hi Chris,
> 
>   you should be able to do it this way:
> 
>   var parent = $(this).parents('div.parent');
> 
> 
> 
> --Karl
> _
> Karl Swedberg
> www.englishrules.com
> www.learningjquery.com
> 
> 
> 
> On Feb 15, 2007, at 11:01 AM, Mahadewa wrote:
> 
>>
>> Hi all,
>>
>> I've got the following problem ...
>>
>> Let's say I have the following html:
>>
>> 
>> 
>> > value="button" />
>> 
>> 
>> 
>> 
>> > value="button" />
>> 
>> 
>>  
>> Now given a JQuery object of any of the button, how can I select  
>> its parent
>> div (the one with the class "parent") ?
>>
>> I have tried the following, but it doesn't seem to yield the  
>> correct object:
>>
>> // This function is wired to the above buttons' onclick event,  
>> passing
>> 'this' as an argument
>> function OnButtonClick(source)
>> {
>> var parent = $(".parent").children(source.id);
>> }
>>
>> Thanks a lot !
>> Chris
>> -- 
>> View this message in context: http://www.nabble.com/Parent- 
>> Selection-Problem-tf3234532.html#a8987992
>> Sent from the JQuery mailing list archive at Nabble.com.
>>
>>
>> ___
>> jQuery mailing list
>> discuss@jquery.com
>> http://jquery.com/discuss/
> 
> 
> ___
> jQuery mailing list
> discuss@jquery.com
> http://jquery.com/discuss/
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Parent-Selection-Problem-tf3234532.html#a8989357
Sent from the JQuery mailing list archive at Nabble.com.


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] Parent Selection Problem

2007-02-15 Thread Karl Swedberg

On Feb 15, 2007, at 11:01 AM, Mahadewa wrote:

// This function is wired to the above buttons' onclick event,  
passing

'this' as an argument
function OnButtonClick(source)
{
var parent = $(".parent").children(source.id);
}


Hi Chris,

 you should be able to do it this way:

var parent = $(this).parents('div.parent');



--Karl
_
Karl Swedberg
www.englishrules.com
www.learningjquery.com



On Feb 15, 2007, at 11:01 AM, Mahadewa wrote:



Hi all,

I've got the following problem ...

Let's say I have the following html:












Now given a JQuery object of any of the button, how can I select  
its parent

div (the one with the class "parent") ?

I have tried the following, but it doesn't seem to yield the  
correct object:


// This function is wired to the above buttons' onclick event,  
passing

'this' as an argument
function OnButtonClick(source)
{
var parent = $(".parent").children(source.id);
}

Thanks a lot !
Chris
--
View this message in context: http://www.nabble.com/Parent- 
Selection-Problem-tf3234532.html#a8987992

Sent from the JQuery mailing list archive at Nabble.com.


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread Derrek
Hey Blair,That did the trick.  Thanks for the help.But I must (regretfully) say that the documentation on this point is lacking.It seems to me that parents() and ancestors() are the same except for the order of objects returned.
parents() = parent[0], grandparent[1]ancestors() = grandparent[0], parent[1]Perhaps the someone could add this simple explanation to the documentation.I appreciate everyone's help,Derrek
On 10/18/06, Blair McKenzie <[EMAIL PROTECTED]> wrote:
Try :first. I think parents() actually works differently from the other filters, in that the elements are in reverse order (parent is [0], grandparent is [1]).Blair
On 10/19/06, 
Derrek <[EMAIL PROTECTED]> wrote:

Hi John,Say I have:
            
            If I do $('#myInput').parents('tr:last').before(' ... ')
Then the the new row appears between  and  and not between  and  like I would expect.


Did I screw up something?On 10/18/06, John Resig <


[EMAIL PROTECTED]> wrote:
> Yeah, but if I have a table embedded within a table (ugh, I know) then I
> find both the s.  I tried parents('tr').get(0), but that's not right
> either.The issue is that that the s are returned in the order in whichthey're in the document. So the highest  in the document isreturned first. So the best way to do this is by doing:
$(...).parents("tr:last")Which will give you the last  found (but the one closest to yourstarting element).--John___jQuery mailing list
discuss@jquery.com


http://jquery.com/discuss/


___jQuery mailing listdiscuss@jquery.com

http://jquery.com/discuss/

___jQuery mailing listdiscuss@jquery.com
http://jquery.com/discuss/
___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread Blair McKenzie
Try :first. I think parents() actually works differently from the other filters, in that the elements are in reverse order (parent is [0], grandparent is [1]).BlairOn 10/19/06, 
Derrek <[EMAIL PROTECTED]> wrote:
Hi John,Say I have:
            
            If I do $('#myInput').parents('tr:last').before(' ... ')
Then the the new row appears between  and  and not between  and  like I would expect.

Did I screw up something?On 10/18/06, John Resig <

[EMAIL PROTECTED]> wrote:
> Yeah, but if I have a table embedded within a table (ugh, I know) then I
> find both the s.  I tried parents('tr').get(0), but that's not right
> either.The issue is that that the s are returned in the order in whichthey're in the document. So the highest  in the document isreturned first. So the best way to do this is by doing:
$(...).parents("tr:last")Which will give you the last  found (but the one closest to yourstarting element).--John___jQuery mailing list
discuss@jquery.com

http://jquery.com/discuss/


___jQuery mailing listdiscuss@jquery.com
http://jquery.com/discuss/
___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread Derrek
Hi John,Say I have:
            
            If I do $('#myInput').parents('tr:last').before(' ... ')
Then the the new row appears between  and  and not between  and  like I would expect.
Did I screw up something?On 10/18/06, John Resig <
[EMAIL PROTECTED]> wrote:
> Yeah, but if I have a table embedded within a table (ugh, I know) then I> find both the s.  I tried parents('tr').get(0), but that's not right
> either.The issue is that that the s are returned in the order in whichthey're in the document. So the highest  in the document isreturned first. So the best way to do this is by doing:
$(...).parents("tr:last")Which will give you the last  found (but the one closest to yourstarting element).--John___jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread John Resig
> Yeah, but if I have a table embedded within a table (ugh, I know) then I
> find both the s.  I tried parents('tr').get(0), but that's not right
> either.

The issue is that that the s are returned in the order in which
they're in the document. So the highest  in the document is
returned first. So the best way to do this is by doing:
$(...).parents("tr:last")

Which will give you the last  found (but the one closest to your
starting element).

--John

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread Derrek
Yeah, but if I have a table embedded within a table (ugh, I know) then I find both the s.  I tried parents('tr').get(0), but that's not right either.Suggestions?
On 10/18/06, John Resig <[EMAIL PROTECTED]> wrote:
> Doesn't .parent() only look up one level? I thought you'd use .ancestors().Oh yeah... man, I'm totally out of it today. Derrek - you should beusing .parents("tr") or .ancestors("tr") (they're synonymous).
--John___jQuery mailing listdiscuss@jquery.comhttp://jquery.com/discuss/

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread John Resig
> Doesn't .parent() only look up one level? I thought you'd use .ancestors().

Oh yeah... man, I'm totally out of it today. Derrek - you should be
using .parents("tr") or .ancestors("tr") (they're synonymous).

--John

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread Derrek
I'm consfused about the difference between parents() and ancestors().  The documentation on visualjquery.com isn't very clear as to the difference and the behavior seems to be the same.
On 10/18/06, Dave Methvin <[EMAIL PROTECTED]> wrote:
>> But, to my mind, it makes sense to do>> $('#myElement').parent().parent() because the parent of the  is>> a  and the parent of the  is the .  Or is that wrong?
>> No, you're right - On first glance I thought it was ...>  sorry about that. Not sure why .parent('tr') didn't work, though.Doesn't .parent() only look up one level? I thought you'd use .ancestors().
___jQuery mailing listdiscuss@jquery.comhttp://jquery.com/discuss/

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread Dave Methvin
>> But, to my mind, it makes sense to do
>> $('#myElement').parent().parent() because the parent of the  is 
>> a  and the parent of the  is the .  Or is that wrong?
>
> No, you're right - On first glance I thought it was 
... 
>  sorry about that. Not sure why .parent('tr') didn't work, though.

Doesn't .parent() only look up one level? I thought you'd use .ancestors().


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread Derrek
Hey John,Unfortunately, I don't have an example up.But, to my mind, it makes sense to do $('#myElement').parent().parent() because the parent of the  is a  and the parent of the  is the .  Or is that wrong?
DerrekOn 10/18/06, John Resig <[EMAIL PROTECTED]> wrote:
> However, this produces no visual effect:>  $('#myElement').parent('tr')> .before('Please> correct the error');
>> If I change the code, I see my new row:> $('#myElement').parent().parent()>  .before('Please
> correct the error');>> I don't like this since it's bound to a specific table arrangement.>> Does anyone have any hints or different solutions?
What happens if you just do:$('#myElement').parent().before('...');It seems like something like that should work just fine. (The factthat .parent().parent() works kind of makes me suspicious) Do you have
an example up anywhere of the problem in action?--John___jQuery mailing listdiscuss@jquery.com
http://jquery.com/discuss/
___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread John Resig
> But, to my mind, it makes sense to do
> $('#myElement').parent().parent() because the parent of the
>  is a  and the parent of the  is the .  Or is that wrong?

No, you're right - On first glance I thought it was  ...  sorry about that. Not sure why .parent('tr')
didn't work, though.

--John

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent()

2006-10-18 Thread John Resig
> However, this produces no visual effect:
>  $('#myElement').parent('tr')
> .before('Please
> correct the error');
>
> If I change the code, I see my new row:
> $('#myElement').parent().parent()
>  .before('Please
> correct the error');
>
> I don't like this since it's bound to a specific table arrangement.
>
> Does anyone have any hints or different solutions?

What happens if you just do:
$('#myElement').parent().before('...');

It seems like something like that should work just fine. (The fact
that .parent().parent() works kind of makes me suspicious) Do you have
an example up anywhere of the problem in action?

--John

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent() modifies original object

2006-10-17 Thread Dave Methvin
I think we are talking about two different effects here. This can definitely
be subtle so it's good to have someone ask the question.

> var cell = $(e);
> var cellParent = cell.parent();
> var cellParent2 = cell.parent();
> ...
> Further digging seems to hint at the fact that every time 
> cell.parent() is called, it's the equivalent of cell = cell.parent()
> and as such the original value of cell is lost.

Most jQuery methods are designed to be chainable; they return the original
object as the return value so that a subsequent method can be called on it.
That is true of the .parent() method. So what's happening is that you have
created three different aliases for the same object! The two .parent()
method calls are modifying the internal state of the *same* jQuery object
and returning that object back to you. It's the internal state of the jQuery
object that remembers the selected nodes, not the return value.

To create a brand new jQuery object that contains the parent, without
changing the jQuery object with cell, you could use one of these:

var cell = $(e);
// Copy cell object and then get parent in the copied object
var cellParent = $(cell).parent();
 // XPath expr navigates to parent using cell as the context
var cellParent2 = $("..", cell); 

The $(cell) usage for creating a copy of a jQuery object is described in the
documentation for $(), but navigating the jQuery site I had a hard time
finding the XPath documentation to explain the second example. 

"Destructive" methods like .parent() that change the jQuery object's
selected nodes always push the previous list of selected nodes onto an
internal stack that can be popped with the .end() method. So in the case
above, the jQuery object stored in cellParent has a pushed copy of the DOM
node selected by cell (the same DOM node originally passed in by e) that you
can get to if you use .end(). The problem you originally mentioned above
would have occurred whether destructive methods worked this way or not. It's
just a difference of whether the object "stacked" the previous (two) sets of
nodes. 

> Maybe someone can shed some light on specific situations where
> the destructive method saves considerable amounts of code.
> I can definitely see how it'd be useful--do some work on the parent,
> then end(), then do some work on the element itself--but is this
> functionality used frequently?

It's useful when you get comfortable with chaining because it avoids having
to declare and use extra variables. I would actually prefer an explicit
push/pop approach myself because the creation of the stacked nodes is too
implicit and the stacked node references are cumbersome to eliminate if you
don't want them.

Sounds like this was (painfully!) reduced from some more complex code. Maybe
there is a jQuery-ish way to do it? You can avoid trouble with aliases if
you chain methods, since you aren't storing the object in a variable. 


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent() modifies original object

2006-10-17 Thread Peter Woods
I thought I'd read somewhere on here about functions being
destructive, but I wasn't sure hence the question. While it makes
sense when you're doing crazy chained method calls, I think it's very
unintuitive during regular use of the parent() method, especially
because there's nothing which signifies in the method call that it is
indeed destructive (such as in Ruby or Scheme where you have set! or
what not). It's also not noted in the API... which is definitely an
oversight no matter how you look at it.

Maybe someone can shed some light on specific situations where the
destructive method saves considerable amounts of code. I can
definitely see how it'd be useful--do some work on the parent, then
end(), then do some work on the element itself--but is this
functionality used frequently? I think it makes perfect sense for
filter(), but even so, I think it should be made clear in some way or
another that a function you're calling is destructive, otherwise it
can create the incredibly confusing behavior I demonstrated above
unless you're made explicitly aware that it's not doing what you think
it's doing.

Thanks for the answer nonetheless, and I apologize in advance to John
and Jörn if this has been discussed to death before!

Cheers!
~Peter

On 10/17/06, Jörn Zaefferer <[EMAIL PROTECTED]> wrote:
> Peter Woods schrieb:
> > I'm not sure if this is the way it's supposed to work, but this makes
> > absolutely no sense to me as far as implementation goes. If I have
> > code like this: [...]
> >
> > Instead of printing the equivalent of: $(e).id(), $(e).parent().id(),
> > and $(e).parent().parent().id(), it prints $(e).parent.parent.id()
> > three times. Further digging seems to hint at the fact that every time
> > cell.parent() is called, it's the equivalent of cell = cell.parent()
> > and as such the original value of cell is lost.
> >
> > Is this behavior intentional, or is it a bug? It seems quite
> > counterintuitive to me, and while in the dumbed-down example above it
> > makes more sense to use $(e).parent() instead of cell.parent(), I find
> > it more intuitive to use cell.parent() in other instances and thus
> > discovered this behavior.
> It is intentional. parent() is a destructive operation on the jQuery
> object like filter(), find() etc. and can be reverted with end().
>
> There is the concept to pass an additional function to all desctructive
> operations: That function is executed for the modified stack and then
> returns an unmodified object. Maybe the discussion should be started
> again... There were several votes that said it would be unintuitive if a
> single method is once destructive and once it is not because an
> additional function is passed... What do you think?
>
> -- Jörn
>
> ___
> jQuery mailing list
> discuss@jquery.com
> http://jquery.com/discuss/
>

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] parent() modifies original object

2006-10-17 Thread Jörn Zaefferer
Peter Woods schrieb:
> I'm not sure if this is the way it's supposed to work, but this makes 
> absolutely no sense to me as far as implementation goes. If I have 
> code like this: [...]
>
> Instead of printing the equivalent of: $(e).id(), $(e).parent().id(), 
> and $(e).parent().parent().id(), it prints $(e).parent.parent.id() 
> three times. Further digging seems to hint at the fact that every time 
> cell.parent() is called, it's the equivalent of cell = cell.parent() 
> and as such the original value of cell is lost.
>
> Is this behavior intentional, or is it a bug? It seems quite 
> counterintuitive to me, and while in the dumbed-down example above it 
> makes more sense to use $(e).parent() instead of cell.parent(), I find 
> it more intuitive to use cell.parent() in other instances and thus 
> discovered this behavior.
It is intentional. parent() is a destructive operation on the jQuery 
object like filter(), find() etc. and can be reverted with end().

There is the concept to pass an additional function to all desctructive 
operations: That function is executed for the modified stack and then 
returns an unmodified object. Maybe the discussion should be started 
again... There were several votes that said it would be unintuitive if a 
single method is once destructive and once it is not because an 
additional function is passed... What do you think?

-- Jörn

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/