6

Okay, so I've had this code that used to work just fine. I recently upgraded my jQuery from 1.4.4 to 1.5.2, and apparently this has quit working. However, I've tried the code with 1.4.4. and 1.3.2 and it won't work there, either.

This did work. I can't figure out why it isn't. Any help?

Edit: start and end are arguments, with the text of the select element's ID.


var selectedIndex = document.getElementById(start).selectedIndex; // get the selected index from the correct select box

if (selectedIndex != -1) {      // if something is selected, do the following:
       var selectedElement = document.getElementById(start).options[selectedIndex]; // get the element that's selected

       if (selectedIndex == (document.getElementById(start).options.length - 1) && selectedIndex != 0) {
           selectedIndex--; // if we're at the bottom of the list, set our selectedIndex variable to the one right before it
       }

       $("#" + start).remove(selectedElement);  // remove the selected element from the start side          
       $("#" + end).append(selectedElement);        // and add it to the end of the ending side
}

Here's an example of an option I want to move.
<option sortable="yes" datatype="string" value="foo" type="arbitrary">Foo</option>

The issue I'm getting is apparently within jQuery itself - using the full version,
expr.replace is not a function [Break On This Error] expr = expr.replace( /\=\s*([^'"]])\s]/g, "='$1']" ); [jquery-latest.debug.js, line 4540]
The error happens when I hit the $.remove portion of the code.

Thanks.

tjsimmons
  • 733
  • 4
  • 10
  • 21

3 Answers3

4

You are getting this error because .remove() takes a string selector, and if none is supplied, removes those of the parent object. Try

$(selectedElement).remove();
mattsven
  • 22,305
  • 11
  • 68
  • 104
  • But why did this used to work? That's what I'm confused on. This used to work fine - I've added an ID to the element I'm trying to remove and passed that in the arguments for `.remove()` but instead of erroring, it just does nothing. I'll give this a shot. – tjsimmons May 02 '11 at 15:22
  • Couldn't we just use $(selectedElement).remove(); ? – cwharris May 02 '11 at 15:27
  • This is it. Gah. Thanks. I just have no idea why this used to work and has subsequently stopped, in all versions of jQuery. – tjsimmons May 02 '11 at 15:29
2

Is there a reason you're using the getElementById calls? Let jQuery do the work for you... Instead of using:

$("#" + start).remove(selectedElement);  // remove the selected element from the start side          
$("#" + end).append(selectedElement);        // and add it to the end of the ending side

}

try using:

$("#"+start+" option:selected").appendTo("#" + end);

It combines the remove/append operations into one, and may solve your problem.

Ben
  • 308
  • 2
  • 13
  • The reason for the getElementById calls is to get certain values out, like the selected index. This was an early-ish jQuery project of mine, and I wasn't really using the filters like that. I'll also give this a shot. – tjsimmons May 02 '11 at 15:25
0

Unfortunately, <option> is not ordinary element so it might cause such problems.

See the accepted answer on this question for code that should work.

Community
  • 1
  • 1
Shadow The GPT Wizard
  • 66,030
  • 26
  • 140
  • 208
  • Yeah, ` – tjsimmons May 02 '11 at 15:23
  • @tjs good question.. did you try the code in the other question? – Shadow The GPT Wizard May 02 '11 at 15:30
  • Haven't used that specifically, but the accepted answer here was very similar and got me going. I just have no idea A) why this stopped working, and B) why no one else discovered this before me (where it's being used). – tjsimmons May 02 '11 at 15:32
  • Yep, nope. No idea. I know for a fact it worked for months, and I don't know at what point it broke. – tjsimmons May 04 '11 at 15:20