[javascript] no puedo extraer correctamente los datos de th

Iniciado por $francisco, Enero 24, 2018, 11:50:44 AM

Tema anterior - Siguiente tema

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

Enero 24, 2018, 11:50:44 AM Ultima modificación: Enero 24, 2018, 03:28:59 PM por Gabriela
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
$(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
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.

Bro el problema es el como funciona el find() para que funcione usa la función content así:

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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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

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
$(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
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

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: php

<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: php

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: php

{
  bet:"quien gana",
  date:"28-01-2018",
  dp:"23-01-2018 15:49:06",
  match:"partido",
  mb:"mb",
  mw:"?",
  sport:"Futbol"
}
Definirse es limitarse

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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
$(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
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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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