jQuery seleccionando y agregando DOM
Frecuentes
Visto 69 equipos
0
When I try to append html using jQuery 1.11.1 in the following way;
var containerObject = $("#idToSomeElement")
var _uniqueIdDiv = containerObject.append("<div id='container'></div>");
var _playPauseDiv = _uniqueIdDiv.append("<div id='play_pause_div' class='play_pause_div'></div>");
var _playButtonDiv = _playPauseDiv.append("<div id='play_div' class='play_div'></div>");
var _pauseButtonDiv = _playPauseDiv.append("<div id='pause_div' class='pause_div'></div>");
"container" div is appended inside "idToSomeElement" as expected, but the following appends which are expected to be inside "container" and "play_pause_div" also appears inside "idToSomeElement" div.
Is such a cascaded usage using jQuery is not supported/buggy or am I doing something wrong?
Obviously I was wrong, and my question became "How to chain appends without re-using selectors?" as @SergTomcat guessed correctly.
Then, to be able to make a tree out of these cascaded functions, it becomes sth like this;
var _uniqueIdDiv = containerObject.append("<div id='container' class='container'></div>").children("#container");
var _playPauseDiv = _uniqueIdDiv.append("<div id='play_pause_div' class='play_pause_div'></div>").children("#play_pause_div");
var _playButtonDiv = _playPauseDiv.append("<div id='play_div' class='play_div'></div>");
var _pauseButtonDiv = _playPauseDiv.append("<div id='pause_div' class='pause_div'></div>");
var _volumeDiv = _uniqueIdDiv.append("<div id='volume_div' class='volume_div'></div>").children("#volume_div");
var _muteDiv = _volumeDiv.append("<div id='mute_div' class='mute_div'></div>");
var _unmuteDiv = _volumeDiv.append("<div id='unmute_div' class='unmute_div'></div>");
var _progressBarDiv = _uniqueIdDiv.append("<div id='progress_bar' class='progress_bar'></div>").children("#progress_bar");
var _progressBackgroundDiv = _progressBarDiv.append("<div id='progress_bar_background' class='progress_bar_background'></div>");
var _progressAmountDiv = _progressBarDiv.append("<div id='progress_amount' class='progress_amount'></div>");
var _progressPointerDiv = _progressBarDiv.append("<div id='progress_pointer class='progress_pointer'></div>");
5 Respuestas
3
anexar devuelve tu containerObject
and not the new element you are creating. This is what makes jQuery functions chainable.
contestado el 28 de mayo de 14 a las 14:05
Exactly, my bad... :) - Ali Naci Erdem
2
containerObject.append() devuelve referencia en containerObject object. You'll need to do something like this:
var _uniqueIdDiv = containerObject.append("<div id='container'></div>").children();
contestado el 28 de mayo de 14 a las 14:05
1
probar esto.
You need to get children for append new div, and neet to use $(varname)
var containerObject = $("#idToSomeElement");
var _uniqueIdDiv = $(containerObject).append("<div id='container'></div>").children();
var _playPauseDiv = $(_uniqueIdDiv).append("<div id='play_pause_div' class='play_pause_div'></div>").children();;
var _playButtonDiv = $(_playPauseDiv).append("<div id='play_div' class='play_div'></div>");
var _pauseButtonDiv = $(_playPauseDiv).append("<div id='pause_div' class='pause_div'></div>");
there are this way too
var containerObject = $("#idToSomeElement");
var _uniqueIdDiv = $("<div id='container'></div>").appendTo(containerObject);
var _playPauseDiv = $("<div id='play_pause_div' class='play_pause_div'></div>").appendTo(_uniqueIdDiv);
var _playButtonDiv = $("<div id='play_div' class='play_div'></div>").appendTo(_playPauseDiv);
var _pauseButtonDiv = $("<div id='pause_div' class='pause_div'></div>").appendTo(_playPauseDiv);
contestado el 28 de mayo de 14 a las 14:05
0
append()
devuelve tu containerObject
, not the element you are appending.
Instead you can try
var containerObject = $("#idToSomeElement");
var _uniqueIdDiv = $('<div/>',{id:'container'})
containerObject.append(_uniqueIdDiv);
var _playPauseDiv = _uniqueIdDiv.append("<div id='play_pause_div' class='play_pause_div'></div>");
var _playButtonDiv = _playPauseDiv.append("<div id='play_div' class='play_div'></div>");
var _pauseButtonDiv = _playPauseDiv.append("<div id='pause_div' class='pause_div'></div>");
contestado el 28 de mayo de 14 a las 14:05
0
append function does not return the element that you are appending but the container.
var containerObject = $("#idToSomeElement")
containerObject.append("<div id='container'></div>");
var _uniqueIdDiv =$('#container');
_uniqueIdDiv.append("<div id='play_pause_div' class='play_pause_div'></div>");
var _playPauseDiv = $('#play_pause_div');
_playPauseDiv.append("<div id='play_div' class='play_div'></div>");
var _playButtonDiv = $('#play_div');
_playPauseDiv.append("<div id='pause_div' class='pause_div'></div>");
var _pauseButtonDiv = $('#pause_div');
contestado el 28 de mayo de 14 a las 14:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas jquery html dom or haz tu propia pregunta.
OK, got I was wrong. containerObject.append() does not work as I think it should be... :) - Ali Naci Erdem