Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Javascript funciona en código pero no en archivo

Estas en el tema de Javascript funciona en código pero no en archivo en el foro de Javascript en Foros del Web. Hola. Tengo este javascript para eliminar un div de clase si hay un texto en el html: Código: if(document.body.innerHTML.toString().indexOf('Usuario') > -1){ var resultados = document.getElementsByClassName('online'), ...
  #1 (permalink)  
Antiguo 15/02/2017, 12:27
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Javascript funciona en código pero no en archivo

Hola.

Tengo este javascript para eliminar un div de clase si hay un texto en el html:

Código:
if(document.body.innerHTML.toString().indexOf('Usuario') > -1){
var resultados = document.getElementsByClassName('online'), i;
for (i = 0; i < resultados.length; i += 1) {
resultados[i].style.display = 'none';
}
};
Funciona si lo coloco así al final del html, pero no funciona si lo meto en un archivo javascript que también se incluye en el mismo lugar de la página. De hecho, he colocado el código en la página justo debajo del link al archivo .js. Pero así no funciona.

¿Sabéis dónde puede estar el fallo?

Gracias.
  #2 (permalink)  
Antiguo 15/02/2017, 12:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Javascript funciona en código pero no en archivo

Posiblemente el navegador carga el script antes de renderizar la página, por lo que no encuentra el elemento a eliminar.

Lo más recomendable sería ejecutar el script al finalizar la carga de la página, con el evento onload.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 17/02/2017, 08:10
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Javascript funciona en código pero no en archivo

Lo he puesto así, pero sólo funciona si lo pones en la página en sí, porque si lo coloco en el archivo js no


Código:
function resulta() {
if(document.body.innerHTML.toString().indexOf('Usuario') > -1){
var resultados = document.getElementsByClassName('online'), i;
for (i = 0; i < resultados.length; i += 1) {
resultados[i].style.display = 'none';
}
};
window.onload = resulta;
Esto tampoco:


window.onload = function () {
if(document.body.innerHTML.toString().indexOf('Usu ario') > -1){
var resultados = document.getElementsByClassName('online'), i;
for (i = 0; i < resultados.length; i += 1) {
resultados[i].style.display = 'none';
}
};



No quiero poner onload en el body ni en ningún otro lado de la página.
  #4 (permalink)  
Antiguo 17/02/2017, 09:32
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Javascript funciona en código pero no en archivo

¿Qué error te muestra?

Llendo a afinar el código, esta línea
Código HTML:
Ver original
  1. document.body.innerHTML.toString
la puedes reemplazar por
Código HTML:
Ver original
  1. document.body.textContent
  #5 (permalink)  
Antiguo 17/02/2017, 11:13
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Javascript funciona en código pero no en archivo

No muestra ningún error. Es simplemente que no lo aplica de ninguna forma. Es como si no estuviera.

Luego he leído por ahí cierta problemática con el onload en archivos aparte. ¿Es posible sacarlo de la página y que funcione desde un archivo?
  #6 (permalink)  
Antiguo 17/02/2017, 14:46
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Javascript funciona en código pero no en archivo

¿Te funciona esto?
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html dir="ltr" lang="es-es">
  3.     <head>
  4.         <title></title>
  5.         <meta charset="utf-8">
  6.         <meta name="viewport" content="user-scalable=yes, width=device-width, initial-scale=1">
  7.         <style>
  8.            
  9.         </style>
  10.         <script src="prueba.js"></script>
  11.     </head>
  12.     <body>
  13.  
  14.         <div id="container">
  15.             <div class="header">
  16.                 <div class="logo">Usuario</div>
  17.                 <div class="flex-column">
  18.                     <section id="ocultar">Teléfono y email</section>
  19.                     <section>
  20.                         <ul>
  21.                             <li>Opción 1</li>
  22.                             <li>Opción 2</li>
  23.                         </ul>
  24.                     </section>
  25.                 </div>
  26.             </div>
  27.         </div>
  28.  
  29.     </body>
  30. </html>

prueba.js
Código Javascript:
Ver original
  1. document.addEventListener('DOMContentLoaded', function() {
  2.  
  3.     console.log(document.body.textContent);
  4.  
  5.     if(~document.body.textContent.indexOf('Usuario')){
  6.  
  7.         [].forEach.call(document.querySelectorAll('ul > li'), function(elem) {
  8.  
  9.             elem.style.display = 'none';
  10.         });
  11.     };
  12.  
  13. }, false);
  #7 (permalink)  
Antiguo 18/02/2017, 12:14
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Javascript funciona en código pero no en archivo

Sí, funciona, pero lo he tenido que sustituirlo incluyendo getElementsByClassName, porque se trata de identificar un selector de clase.

Código:
document.addEventListener('DOMContentLoaded', function() {
console.log(document.body.textContent);
if(~document.body.textContent.indexOf('Usuario')){
[].forEach.call(document.getElementsByClassName('online'), function(elem) {
elem.style.display = 'none';
});
}; 
}, false);
Funciona. Pero me gustaría que me alguien me dijese qué función cumple esta línea:

Código:
console.log(document.body.textContent);
Además he tenido que duplicarlo porque al existir "Usuario" han de eliminarse dos selectores y no sólo uno, y lo he dejado así:

Código:
document.addEventListener('DOMContentLoaded', function() {
console.log(document.body.textContent);
if(~document.body.textContent.indexOf('Usuario')){
[].forEach.call(document.getElementsByClassName('online'), function(elem) {
elem.style.display = 'none';
}
);
[].forEach.call(document.getElementsByClassName('online boton'), function(elem) {
elem.style.display = 'none';
}
);
}; 
}, false);
En este último caso, quizás sería otra la fórmula para agrupar estas dos funciones. Me gustaría que me dieseis vuestro parecer sobre ello.

Un saludo.
  #8 (permalink)  
Antiguo 18/02/2017, 13:36
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Javascript funciona en código pero no en archivo

Cita:
Iniciado por JUMASOL Ver Mensaje
Sí, funciona, pero lo he tenido que sustituirlo incluyendo getElementsByClassName, porque se trata de identificar un selector de clase.
getElement está desactualizado. Únicamente es conveniente usarlo cuando se necesite el nodeList esté live. En este tema puedes leer sobre ello http://www.forosdelweb.com/f13/propi...9/#post4809259

querySelector o querySelectorAll pueden obtener elementos tanto por su id, class, name, etc. En tu caso sería querySelectorAll('.online')

Cita:
Iniciado por JUMASOL Ver Mensaje
Funciona. Pero me gustaría que me alguien me dijese qué función cumple esta línea:

Código:
console.log(document.body.textContent);
Es para que vieras, en la consola, la diferencia entre
  • console.log(document.body.textContent)
  • console.log(document.body.innerHTML)
Como puedes observar para obtener el mismo resultado, debes de añadir el método toString() aparte de que innerHTML ha de serializar y analizar, mientras que textContent, no
  • console.log(document.body.innerHTML.toString())

Cita:
Iniciado por JUMASOL Ver Mensaje
Además he tenido que duplicarlo porque al existir "Usuario" han de eliminarse dos selectores y no sólo uno
No es necesario si el número de elemento .online y .online boton es el mismo
Código Javascript:
Ver original
  1. document.addEventListener('DOMContentLoaded', function() {
  2.  
  3.     console.log(document.body.textContent);
  4.  
  5.     if(~document.body.textContent.indexOf('Usuario')){
  6.  
  7.         [].forEach.call(document.querySelectorAll('online'), function(elem, i) {
  8.  
  9.             elem.style.display = 'none';
  10.             document.querySelectorAll('online boton')[i].style.display = 'none';
  11.         });
  12.     };
  13.  
  14. }, false);
  #9 (permalink)  
Antiguo 19/02/2017, 04:00
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Javascript funciona en código pero no en archivo

Gracias mpozo, ya voy viendo.

Etiquetas: funcion, html, text
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:36.