dom.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <?php
  2. /*
  3. * To change this license header, choose License Headers in Project Properties.
  4. * To change this template file, choose Tools | Templates
  5. * and open the template in the editor.
  6. */
  7. ?>
  8. <div class="col-md-10 col-md-offset-1">
  9. <h1>Manipulando los elementos</h1>
  10. <p>Hay numerosas formas de manipular un elemento existente con jQuery.
  11. La más común es cambiar el contenido del HTML o un atributo de un elemento.
  12. jQuery permite de manera simple, la manipulación de estos.
  13. También se puede conseguir información acerca de ellos.
  14. A continuación veremos una lista con los métodos más comunes para conseguir información:
  15. </p>
  16. <ul>
  17. <li><a href="http://api.jquery.com/html/">.html()</a> – Obtiene o establece el contenido del HTML.</li>
  18. <li><a href="http://api.jquery.com/text/">.text()</a> – Obtiene o establece el texto</li>
  19. <li><a href="http://api.jquery.com/attr/">.attr()</a> – Obtiene o establece el valor de un atribuito.</li>
  20. <li><a href="http://api.jquery.com/width/">.width()</a> – Obtiene o establece la anchura en pixels del primer elemento de la selección como un integer.</li>
  21. <li><a href="http://api.jquery.com/height/">.height()</a> – Obtiene o establece la altura en pixels del primer elemento de la selección como un integer.</li>
  22. <li><a href="http://api.jquery.com/position/">.position()</a> – Obtiene un objeto con la información de la posición para el primer elemento de la selección, relativo a su primer ancestro posicionado.</li>
  23. <li><a href="http://api.jquery.com/val/">.val()</a> – Obtiene o establece el valor de un elemento dentro un formulario.</li>
  24. </ul>
  25. <h3>Getters o Setters</h3>
  26. <p>Cambiando los elementos es algo trivial,
  27. solo hay que recorder que el cambio afectará a todos los elementos de la selección.
  28. Si solo quieres cambiar un elemento, asegúrate de estar llamando a
  29. ese elemento antes de crear un método setter.
  30. </p>
  31. <pre>
  32. <code>
  33. $( "#myDiv p:first" ).html( "New &lt;strong&gt;first&lt;/strong&gt; paragraph!" );
  34. </code>
  35. </pre>
  36. <br>
  37. <p>Por ejemplo vamos a ver como se consigue el valor de un input y de un
  38. párrafo.
  39. </p>
  40. <div>Pon algo<input type="text" name="prueba" id="inputPrueba"></div>
  41. <p id="parraPrueba">Esto es una prueba afjadkfsdfasdf</p>
  42. <div>
  43. <button id="getValor">Ver valor</button>
  44. <button id="setValor">Intercambiar valores</button>
  45. </div>
  46. <pre>
  47. <code>
  48. $$("#getValor").click(function() {
  49. alert($("#inputPrueba").val());
  50. alert($("#parraPrueba").text());
  51. });
  52. $("#setValor").click(function(){
  53. var inputValue = $("#inputPrueba").val();
  54. var pText = $("#parraPrueba").text();
  55. $("#inputPrueba").val(pText);
  56. $("#parraPrueba").text(inputValue);
  57. });
  58. </code>
  59. </pre>
  60. <br>
  61. <h3>Moviendo, Copiando y Eliminando Elementos</h3>
  62. <p>Hay un gran número de formas para mover elementos alrededor del DOM,
  63. pero hay dos maneras de enfocarlo:
  64. </p>
  65. <ul>
  66. <li>Colocar el elemento(s) seleccionado relativo a otro elemento.</li>
  67. <li>Colocar un elemento de manera relativa al elemento seleccionado.</li>
  68. </ul>
  69. <p>Por ejemplo, jQuery tiene los métodos “.insertAfter()” y “.after()”.
  70. El método “.insertAfter()” coloca el elemento(s) seleccionado(s) después del
  71. elemento proporcionado como argumento. Mientras el método “.after()” coloca
  72. el elemento proporcionado como argumento después del elemento seleccionado.
  73. Luego otros métodos siguen el mismo patrón como “.insertBefore()” y “.before()”,
  74. “.appendTo()” y “.append()”, y como “.prependTo()” y “.prepend()”.
  75. </p>
  76. <p>El método que necesitarás va a depender de como
  77. enfoques la manera de mover o los elementos que quieras insertar.
  78. Incluso de si quieres guardar una referencia al elemento.
  79. Si necesitas guardar la referencia del elemento que has insertado o movido
  80. lo mejor es usar .insertAfter(), .insertBefore(), .appendTo(), y .prependTo().
  81. </p>
  82. <div>
  83. <ul id="myList">
  84. <li>0 item de la lista</li>
  85. <li>1 item de la lista</li>
  86. <li>2 item de la lista</li>
  87. <li>3 item de la lista</li>
  88. <li>4 item de la lista</li>
  89. <li>5 item de la lista</li>
  90. <li>6 item de la lista</li>
  91. </ul>
  92. </div>
  93. <button id="but-appendTo">Usar appendTo</button>
  94. <button id="but-append">Usar append</button><br>
  95. <pre>
  96. <code>
  97. // Mover elementos tiene diferentes enfoques
  98. // Para hacer el primer item de la lista el último item
  99. $("#but-appendTo").click(function() {
  100. var li = $( "#myList li:first" ).appendTo( "#myList" );
  101. alert(li.text());
  102. });
  103. // Otro enfoque al mismo problema
  104. $("#but-append").click(function() {
  105. $( "#myList" ).append( $( "#myList li:first" ) );
  106. });
  107. // Podemos ver que no hay forma de acceder al item de la lista
  108. // que hemos movido porque vuelve a la lista
  109. </code>
  110. </pre>
  111. <br>
  112. <h3>Clonando Elementos</h3>
  113. <p>Métodos como “.appendTo()” mueven el elemento, pero algunas veces se
  114. necesita una copia del elemento. Se puede usar por ejemplo “.clone()”.
  115. </p>
  116. <p>Para pasar además datos relativos y eventos al elemento clonado, se tendrá
  117. que usar "true" como argumento.
  118. </p>
  119. <div>
  120. <ul id="myList2">
  121. <li>0 item de la lista</li>
  122. <li>1 item de la lista</li>
  123. <li>2 item de la lista</li>
  124. <li>3 item de la lista</li>
  125. <li>4 item de la lista</li>
  126. <li>5 item de la lista</li>
  127. <li>6 item de la lista</li>
  128. </ul>
  129. </div>
  130. <button id="clone-appendTo">Usar appendTo</button><br>
  131. <br>
  132. <pre>
  133. <code>
  134. // Primero se hace una copia del elemento
  135. // Y luego se pone al final de la lista
  136. $("#clone-appendTo").click(function() {
  137. $( "#myList2 li:first" ).clone().appendTo( "#myList2" );
  138. });
  139. </code>
  140. </pre>
  141. <br>
  142. <h3>Eliminando Elementos</h3>
  143. <p>Hay dos formas de eliminar elementos de la página:</p>
  144. <ul>
  145. <li><a href=”http://api.jquery.com/remove/” >.remove()</a>:
  146. Elimina el elemento permanentemente de la página web. Pero devuelve
  147. el elemento eliminado sin los datos y eventos asociados a él por si
  148. se quiere devolverlo a la web.</li>
  149. <li><a href=”http://api.jquery.com/detach/”>.detach()</a>:
  150. Elimina el elemento permanentemente de la página web. Pero devuelve
  151. el elemento eliminado con los datos y eventos asociados a él por si
  152. se quiere devolverlo a la web. </li>
  153. <li><a href="http://api.jquery.com/empty/">.empty()</a>:
  154. Elimina el contenido del elemento dejándolo vacío.</li>
  155. </ul>
  156. <div id="insertParra">
  157. <h4>.remove()</h4>
  158. <p class="yellow">¿que pasa?</p>
  159. saecio
  160. <p class="yellow">como vas</p>
  161. </div>
  162. <div>
  163. <button id="use-remove">Usar remove()</button>
  164. <button id="add-remove">Volver a añadir elementos</button>
  165. </div><br>
  166. <pre>
  167. <code>
  168. var parra;
  169. $( "#use-remove" ).click(function() {
  170. parra = $( ".yellow" ).remove();
  171. });
  172. $( "#add-remove" ).click(function() {
  173. $( "#insertParra" ).append(parra);
  174. });
  175. </code>
  176. </pre>
  177. <br>
  178. <h4>.detach()</h4>
  179. <p>Para conservar los eventos asociados al elemento es mejor usar
  180. “.detach()”. Pues se puede manipular
  181. el árbol DOM mientras se mantienen todos los eventos y datos asociados
  182. a los elementos.
  183. </p>
  184. <div id="insertParra2">
  185. <p class="yellow2">¿que pasa?</p>
  186. saecio
  187. <p class="yellow2">como vas</p>
  188. </div>
  189. <div>
  190. <button id="use-detach">Usar detach()</button>
  191. <button id="add-detach">Volver a añadir elementos</button>
  192. </div><br>
  193. <br>
  194. <pre>
  195. <code>
  196. var parra2;
  197. $( "#use-detach" ).click(function() {
  198. parra2 = $( ".yellow2" ).detach();
  199. });
  200. $( "#add-detach" ).click(function() {
  201. $( "#insertParra2" ).append(parra2);
  202. });
  203. </code>
  204. </pre>
  205. <br>
  206. <h4>.empty()</h4>
  207. <p>Este método eliminar todo los hijos y descendientes dentro del elemento
  208. y además si existe texto también lo elimina.
  209. </p>
  210. <div id="insertParra3">
  211. <p class="yellow3">¿que pasa?</p>
  212. saecio
  213. <p class="yellow3">como vas</p>
  214. </div>
  215. <div>
  216. <button id="use-empty">Usar empty()</button>
  217. <button id="add-empty">Volver a añadir elementos</button>
  218. </div><br>
  219. <br>
  220. <pre>
  221. <code>
  222. var parra3;
  223. $( "#use-empty" ).click(function() {
  224. parra3 = $( ".yellow3" ).empty();
  225. });
  226. $( "#add-empty" ).click(function() {
  227. $( "#insertParra3" ).append(parra3);
  228. });
  229. </code>
  230. </pre>
  231. <br>
  232. <h3>Creando nuevos elementos</h3>
  233. <p>
  234. jQuery ofrece de manera trivial una forma de crear nuevos elementos
  235. e insertarlos con el método que siempre hemos visto $(). Existen dos
  236. métodos de crear elementos de manera interactiva y fácil.
  237. </p>
  238. <pre>
  239. <code>
  240. // Crear elementos nuevos desde un string HTML
  241. $( "&lt;p&gt;This is a new paragraph&lt;/p&gt;" );
  242. $( "&lt;li class="new"&gt;new list item&lt;/li&gt;" );
  243. </code>
  244. </pre>
  245. <br>
  246. <pre>
  247. <code>
  248. // También se puede crear como un objeto jQuery
  249. $( "&lt;a/&gt;", {
  250. html: "This is a &lt;strong&gt;new&lt;/strong&gt; link",
  251. "class": "new",
  252. href: "foo.html"
  253. });
  254. </code>
  255. </pre>
  256. <br>
  257. <p>Se puede ver que la propiedad Class está quoteada mientras que “html”
  258. y “href” no. Los nombres de las propiedades no suelen estar quoteadas
  259. a no ser que sean <a href="https://mathiasbynens.be/notes/reserved-keywords">palabras reservadas</a>. Una vez creado el elemento,
  260. no se inserta inmediatamente a la página, hay diversas formas para
  261. insertar un elemento que vamos a ver.
  262. </p>
  263. <pre>
  264. <code>
  265. var myNewElement = $( "&lt;p&gt;New element&lt;/p&gt;" );
  266. myNewElement.appendTo( "#content" );
  267. $( "ul" ).last().after( myNewElement.clone() ); // Clona el elemento p y ahora existen dos
  268. </code>
  269. </pre>
  270. <br>
  271. <p>
  272. El elemento creado no necesita guardarse en una variable porque
  273. puedes llamar al método para añadir el elemento directamente.
  274. También puede crear un elemento mientras se añade a la página, pero
  275. entonces no tendrás una referencia para el elemento creado.
  276. </p>
  277. <p>
  278. La sintaxis para añadir nuevos elementos es fácil, pero hay que
  279. tener cuidado con el rendimiento de añadir elementos al árbol DOM de
  280. manera repetida. La manera más eficiente de insertar muchos elementos
  281. es crear un solo string con toda la información dentro y entonces
  282. insertarlo en vez de ir insertando los elementos uno a uno. Se puede
  283. usar un array o un String.
  284. </p>
  285. <pre>
  286. <code>
  287. //Como array
  288. var myItems = [];
  289. var myList = $( "#myList" );
  290. for ( var i = 0; i &lt; 100; i++ ) {
  291. myItems.push( "&lt;li&gt;item " + i + "&lt;/li&gt;" );
  292. }
  293. myList.append( myItems.join( "" ) );
  294. </code>
  295. </pre>
  296. <br>
  297. <pre>
  298. <code>
  299. //Como String
  300. var myItems = "";
  301. var myList = $( "#myList" );
  302. for ( var i = 0; i &lt; 100; i++ ) {
  303. myItems += "&lt;li&gt;item " + i + "&lt;/li&gt;";
  304. }
  305. myList.append( myItems);
  306. </code>
  307. </pre>
  308. <br>
  309. <h3>Añadir o modificar el CSS</h3>
  310. <p>jQuery nos da la oportunidad de mediante el método css() modificar
  311. las propiedades de un elemento seleccionado de manera rápida y fácil.
  312. </p>
  313. <p class="parraCSS">Este párrafo puede mutar</p>
  314. <p class="parraCSS">Este también</p>
  315. <pre>
  316. <code>
  317. $( ".parraCSS" )
  318. .on( "mouseenter", function() {
  319. $( this ).css({
  320. "background-color": "yellow",
  321. "font-weight": "bolder"
  322. });
  323. })
  324. .on( "mouseleave", function() {
  325. var styles = {
  326. backgroundColor : "#ddd",
  327. fontWeight: ""
  328. };
  329. $( this ).css( styles );
  330. });
  331. </code>
  332. </pre>
  333. <br>
  334. <h3>Manipulando atributos</h3>
  335. <p>La manipulación de atributos dentro de jQuery es bastante amplia.
  336. Los cambios básicos son simples, pero el método attr() permite una
  337. compleja manipulación si se desea. Puede obtener un valor de un
  338. atributo o establecerlo. Para usarlo se necesita usar dos argumentos,
  339. el tipo de atributo y el valor del atributo.
  340. </p>
  341. <a id="duck" href="https://duckduckgo.com/">Ir a Duckduckgo</a>
  342. <div>
  343. <button id="changeHref">Cambiar link</button>
  344. </div>
  345. <pre>
  346. <code>
  347. $("#changeHref").click(function() {
  348. $("#duck").attr( "href", "https://www.mozilla.org" );
  349. });
  350. </code>
  351. </pre>
  352. <br>
  353. <p>Ahora vamos a cambiarle varios atributos</p>
  354. <a id="duck2" href="https://duckduckgo.com/">Ir a Duckduckgo</a>
  355. <div>
  356. <button id="changeAtt">Cambiar link</button>
  357. </div><br>
  358. <pre>
  359. <code>
  360. //Esto es CSS
  361. #google {
  362. color:red;
  363. }
  364. $("#changeAtt").click(function() {
  365. $("#duck2").text("Ir a google");
  366. $("#duck2").attr({
  367. href: "https://www.google.es",
  368. id: "google",
  369. });
  370. });
  371. </code>
  372. </pre>
  373. <br>
  374. <h4>Método removeAttr()</h4>
  375. <p>También se puede eliminar un atributo de un elemento, por ejemplo se puede
  376. eliminar el título de una página</p>
  377. <a id="google2" href="https://www.google.es">Ir a Google</a><br>
  378. <button id="removeHref">Quitar el enlace</button><br>
  379. <pre>
  380. <code>
  381. $("#removeHref").click(function() {
  382. $("#google2").removeAttr("href");
  383. });
  384. </code>
  385. </pre>
  386. <br>
  387. <h3>Métodos addClass() y removeClass()</h3>
  388. <p>Este tipo de métodos suelen ir juntos pues al añadir una clase se suele
  389. quitar otra.
  390. </p>
  391. <p id="specialBig" class="specialBig">Este párrafo puede hacerse más grande</p>
  392. <pre>
  393. <code>
  394. $("#specialBig").hover(function() {
  395. $(this).removeClass("specialBig").addClass("specialLittle");
  396. },
  397. function() {
  398. $(this).removeClass("specialLittle").addClass("specialBig");
  399. });
  400. </code>
  401. </pre>
  402. <br>
  403. </div>
  404. <script src="../jQueryProject/assets/js/dom.js"></script>