Saltar al contenido

obtener un hermano cercano en javascript

Basta ya de indagar en otras webs porque llegaste al sitio adecuado, contamos con la solución que buscas sin problemas.

Solución:

Para un solo elemento de tramo, debería ser bastante fácil. Simplemente llame a myFunction(this) al hacer clic en el enlace y manipule el DOM de esta manera:

function myFunction(currObj)
var parentofSelected = currObj.parentNode; // gives the parent DIV

var children = parentofSelected.childNodes;
for (var i=0; i < children.length; i++) 
    if (children[i].tagName = "span") 
        myValue= children[i].value;
        break;
    

alert(myValue); // just to test

  // end function

Espero que esto funcione. ¡Lo hizo por mí!

Desde el no es lo inmediato hermano de eso no podemos invocar .previousSibling o .previousElementSibling. La mejor solución podría ser obtener el padre y consulta por el

document.getElementById( 'div1' ).getElementsByTagName( 'a' )[ 0 ].addEventListener('click', function() 
    alert( this.parentNode.getElementsByTagName( 'span' )[ 0 ].textContent );
, false);

Manifestación: http://jsfiddle.net/cEBnD/

Actualización: Soluciones con y sin jQuery

Esta respuesta recibió tantos votos negativos por mostrar un ejemplo con jQuery que decidí agregar más ejemplos con JavaScript estándar para que cualquiera pudiera elegir si usar jQuery o no.

En general, puede utilizar .previousSibling en vainilla JavaScript, consulte:

  • https://developer.mozilla.org/en-US/docs/Web/API/Node/previousSibling

y puedes usar .prev() en jQuery, ver:

  • https://api.jquery.com/prev/

Pero tenga en cuenta que es posible que no funcionen en casos más complicados cuando no conoce la estructura exacta de todo su DOM.

Aquí hay algunos ejemplos de cómo lograr ese objetivo tanto usando jQuery como con JavaScript estándar, para casos simples con estructura DOM fija y para casos más complicados usando clases.

sin clases

Para las estructuras DOM más simples, puede salirse con la suya colocando detectores de eventos en todos los enlaces y confiando en el conocimiento implícito del DOM, pero esto puede no funcionar para situaciones más complejas; para eso, vea los ejemplos con clases a continuación.

Con jQuery:

$('a').click(function () 
  alert( $(this).prev().text() );
  return false;
);

Ver MANIFESTACIÓN.

Sin jQuery:

document.querySelectorAll('a').forEach(link => 
  link.addEventListener('click', () => 
    alert(link.previousSibling.previousSibling.innerText);
  );
);

Tenga en cuenta que el previousSibling tiene que usarse dos veces, porque el nodo de texto vacío que está entre ese tramo y el enlace se usaría de otra manera.

Ver MANIFESTACIÓN.

usando clases

Si el span no es inmediatamente anterior a su a elemento, es posible que también desee hacerlo un poco diferente, agregando también algunas clases para asegurarse de que su código no rompa ningún otro enlace en la página:

Con jQuery:

$('a.link').click(function () 
  alert( $(this).parent().find('span.text').text() );
  return false;
);

Ver MANIFESTACIÓN.

Sin jQuery:

document.querySelectorAll('a.link').forEach(link => 
  link.addEventListener('click', () => 
    alert(link.parentNode.querySelector('span.text').innerText);
  );
);

Ver MANIFESTACIÓN.

El código anterior vinculará los controladores de clics a cada a elemento con clase "enlace" que alertará un texto contenido por su hermano span elemento con una clase "texto". (Por supuesto, los nombres de las clases deberían ser más descriptivos que eso).

Sección de Reseñas y Valoraciones

Si haces scroll puedes encontrar las explicaciones de otros administradores, tú asimismo tienes la opción de insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *