Muy buenas, creo que se me escapa algo y no porque obtengo datos en blanco y nulos que no se el porque se muestran.
$(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
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í:
...
var object = $(text).contents().find('th');
...
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í
$(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
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
<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.
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í:
{
bet:"quien gana",
date:"28-01-2018",
dp:"23-01-2018 15:49:06",
match:"partido",
mb:"mb",
mw:"?",
sport:"Futbol"
}
No tienes permitido ver enlaces.
Registrate o Entra a tu 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 enlaces.
Registrate o Entra a tu 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í
$(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
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.