[javascript] no puedo extraer correctamente los datos de th

  • 4 Respuestas
  • 2326 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado $francisco

  • *
  • Underc0der
  • Mensajes: 194
  • Actividad:
    0%
  • Reputación 0
  • Skype: hackloper
    • Ver Perfil
    • Email
Muy buenas, creo que se me escapa algo y no porque obtengo datos en blanco y nulos que no se el porque se muestran.

Código: (javascript) [Seleccionar]
$(document).ready(function(){
$('.getter').on('click',function(){
    var text = `<th>1</th>
                <th id="sport">Futbol</th>
                <th id="match">partido</th>
                <th id="bet">quien gana</th>
                <th id="mb">mb</th>
                <th id="mw">?</th>
                <th id="date">28-01-2018</th>
                <th id="dp">23-01-2018 15:49:06</th>
                <th id="_id">1</th>`;
    var object = $(text).find('th');
    var elements = object.prevObject;
    $(elements).each(function(){
        alert($(this).text());
    });
})

});

El resultado que esperaba es que pudiera obtener los valores de <th> pero por algun motivo obtengo 16 objetos cuando solo tendrian que ser 9 y el resto me los muestra en vacios ¿que es lo que pasa?
Otro detalle si cambio esta linea
Código: (javascript) [Seleccionar]
var object = $(text).find('a');No debería retornar nada ya que estoy intentando obtener solo los enlaces pero aun así obtiene el mismo resultado.
Gracias.
« Última modificación: Enero 24, 2018, 03:28:59 pm por Gabriela »

Desconectado kid_goth

  • *
  • Underc0der
  • Mensajes: 203
  • Actividad:
    10%
  • Reputación 3
  • Tu conocimiento se limita cuando dices NO PUEDO...
    • Ver Perfil
    • DC Projects
    • Email
Bro el problema es el como funciona el find() para que funcione usa la función content así:

Código: (javascript) [Seleccionar]
...
var object = $(text).contents().find('th');
...



Acepta con humildad y aprecio que en la vida la muerte es inevitable y amarás ésta, adorando la muerte

Desconectado $francisco

  • *
  • Underc0der
  • Mensajes: 194
  • Actividad:
    0%
  • Reputación 0
  • Skype: hackloper
    • Ver Perfil
    • Email
Gracias me sirvio, pero ¿porque se obliga a usar contents y no funciona con el texto directamente?

hay otra cosa que no logre hacer esta que me acorde de que esta parent() pero no logro entender muy bien esto mi código quedo así
Código: (javascript) [Seleccionar]
$(document).ready(function(){
    $('.getter').on('click',function(){
        var html = $(this).html();
        var content = $(html).contents();
        $(content).each(function(index){
            if(index > 0 && index != 7){
                var id = $(this).parent().attr('id');
                var value = $(this).text();
                if(index == 6){
                 value = value.split('-').reverse().join('-');
                 console.log(value);
                }
                $('#setter #'+id).val(value);
            }
        });
    });
});

pero no entiendo por que esto no funciona
Código: (javascript) [Seleccionar]
var id = $(this).parent().attr('id');y estoy obligado a llamar a perent() si supuestamente estoy en el objeto de el tag que estoy iterando

Desconectado linuxmeister

  • *
  • Underc0der
  • Mensajes: 30
  • Actividad:
    0%
  • Reputación 1
  • Aspire to inspire before we expire
    • Ver Perfil
No entiendo muy bien lo que quieres hacer, recoger los datos que hay en los th y ya esta?
Para eso usas getElementByTagName('th'), lo recorres y metes el contenido en un array por ejemplo.

HTML
Código: [Seleccionar]
<table>
<th id="sport">Futbol</th>
<th id="match">partido</th>
<th id="bet">quien gana</th>
<th id="mb">mb</th>
<th id="mw">?</th>
<th id="date">28-01-2018</th>
<th id="dp">23-01-2018 15:49:06</th>
<th id="_id">1</th>
</table>

Con unas pocas líneas de javascript nativo recogemos los valores de los th y los almacenamos en un array asociativo.

Código: [Seleccionar]
var ths = document.getElementsByTagName('th');
var datos = {};
for (let th of ths) {
    datos[th.id] = th.innerHTML;
}

Esto nos almacenará la información tal que así:
Código: [Seleccionar]
{
  bet:"quien gana",
  date:"28-01-2018",
  dp:"23-01-2018 15:49:06",
  match:"partido",
  mb:"mb",
  mw:"?",
  sport:"Futbol"
}
Definirse es limitarse

Desconectado kid_goth

  • *
  • Underc0der
  • Mensajes: 203
  • Actividad:
    10%
  • Reputación 3
  • Tu conocimiento se limita cuando dices NO PUEDO...
    • Ver Perfil
    • DC Projects
    • Email
Gracias me sirvio, pero ¿porque se obliga a usar contents y no funciona con el texto directamente?

Porque el find funciona sobre un elemento padre para ver en su contenido, en el ejemplo que envías realmente no tienes un parent que contenga el resto, y aún si le pusieras un <div> o algo antes no daría ya que el mismo debe pertenecer al dom.

hay otra cosa que no logre hacer esta que me acorde de que esta parent() pero no logro entender muy bien esto mi código quedo así
Código: (javascript) [Seleccionar]
$(document).ready(function(){
    $('.getter').on('click',function(){
        var html = $(this).html();
        var content = $(html).contents();
        $(content).each(function(index){
            if(index > 0 && index != 7){
                var id = $(this).parent().attr('id');
                var value = $(this).text();
                if(index == 6){
                 value = value.split('-').reverse().join('-');
                 console.log(value);
                }
                $('#setter #'+id).val(value);
            }
        });
    });
});

pero no entiendo por que esto no funciona
Código: (javascript) [Seleccionar]
var id = $(this).parent().attr('id');y estoy obligado a llamar a perent() si supuestamente estoy en el objeto de el tag que estoy iterando

cuidado con el uso de ese this tan seguido... por otro lado cuando le pasas el parent busca la primera referencia convirtiendolo en un Element en vez de un texto, supongo que igual con contents() podrías peeeero depende de como tengas el html.



Acepta con humildad y aprecio que en la vida la muerte es inevitable y amarás ésta, adorando la muerte