Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/11/2014, 15:56
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Saber a que fila pertenece un elemento

Podrías realizar la búsqueda con ayuda de un bucle que vaya desde el primer elemento padre de la caja de texto hasta la raíz del documento o el límite que especifiques. En la librería jQuery, existe un método llamado parents con el cual puedes obtener a todos los elementos padre del elemento indicado o solo a los que desees encontrar, ya sea por el tipo de elemento, id o clase.

Como me interesó el tema, elaboré un pequeño, limitado pero funcional método con características muy similares al del que menciono.

Código Javascript:
Ver original
  1. window.Element.prototype.parents = function(){
  2.     var target = arguments.length ?
  3.                  document.querySelectorAll(arguments[0]) :
  4.                  document.querySelectorAll("*"),
  5.         ancestors = [],
  6.         list = [].slice.call(target), i;
  7.     for (i = this.parentNode; i != document; i = i.parentNode)
  8.         if (list.indexOf(i) > -1) ancestors.push(i);
  9.     return ancestors.length > 1 ? ancestors : ancestors[0];
  10. };
  11.  
  12. var foo = document.querySelector("#foo"); //Toma al elemento de id 'foo'
  13. foo.parents("tr").style.background = "red"; //Pinta de rojo el fondo de la fila en la que se encuentra el elemento
  14. console.log(foo.parents("tr").rowIndex); //Muestra el número de fila en la que se encuentra el elemento

Como te comenté, busco desde el primer elemento padre del elemento en cuestión hasta que lleguemos a la raíz del documento (<html>) y, al final de cada iteración, tomaremos al elemento padre del elemento actual. Previamente, tomaré al conjunto de elementos que coincidan con el tipo de elemento que estoy buscando, en este caso, filas de una tabla, pero si no se especifica el tipo de elemento a buscar, se toman a todos. Como el método querySelectorAll devuelve una lista de nodos y no un array para poder utilizar alguno de los métodos de búsqueda de JS, lo convierto en un array utilizando el método slice.

En el bucle, utilizo el método indexOf para buscar a los elementos en la lista que coincidan con el elemento padre actual en la iteración, en otras palabras, en el bucle, estamos iterando a los elementos padre del elemento clave (la caja de texto), mientras que, en el array list, tengo ya sea a todos los elementos del documento, a todos los elementos cuyo tipo de elemento o clase sean igual al especificado o al elemento cuyo id sea el que se indicó. En caso de darse la coincidencia en cada búsqueda, se asigna al elemento encontrado en el array ancestors y, finalizado el bucle, se devuelve dicho conjunto, si es que tiene a más de un elemento, o solo al elemento encontrado, en caso de que —obviamente— sea solo uno.

Como el método indexOf para arrays funciona en todos los navegadores excepto en versiones anteriores a IE9, te sugiero implementar este algoritmo al inicio del archivo JS. Y lo mismo va por el método querySelectorAll en caso de que desees que esto funcione en versiones anteriores a IE8, pudiendo evitar el inconveniente de la compatibilidad implementando este algoritmo.

DEMO

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand