EDIT: Según la aclaración, creo que esto es lo que quiere decir:
EDIT: Como ha señalado @Misha, outerWidth()
y outerHeight()
deben utilizarse en lugar de width()
y height()
con el fin de obtener una precisa range
.
Además, si no hay nada para evitar la propagación de eventos en la página, a continuación, el click
se debe colocar en la document
, ya que será mucho más eficiente. Incluso si algún otro controlador click
evita el burbujeo, igual debería tener el click
en el document
, y simplemente manejarlo por separado del controlador que evita el burbujeo.
Ejemplo:http://jsfiddle.net/57bVR/3/
$(document).click(function(e) {
var clickX = e.pageX
,clickY = e.pageY
,list
,$list
,offset
,range
,$body = $('body').parents().andSelf();
$list = $('body *').filter(function() {
offset = $(this).offset();
range = {
x: [ offset.left,
offset.left + $(this).outerWidth() ],
y: [ offset.top,
offset.top + $(this).outerHeight() ]
};
return (clickX >= range.x[0] && clickX <= range.x[1]) && (clickY >= range.y[0] && clickY <= range.y[1])
});
$list = $list.add($body);
list = $list.map(function() {
return this.nodeName + ' ' + this.className
}).get();
alert(list);
return false;
});
Respuesta original:
Esto le dará una matriz de los nombres de las etiquetas, incluyendo el lapso. No pude decir si esto es lo que quería.
Se utiliza junto con .parents()
.andSelf()
para obtener los elementos, a continuación, utiliza .map()
con .get()
para crear la matriz.
Ejemplo:http://jsfiddle.net/9cFTG/
var list;
$('span').click(function() {
list = $(this).parents().andSelf().map(function() {
return this.nodeName;
}).get();
alert(list);
});
si sólo quería los elementos, no los nombres de las etiquetas, deshacerse de .map()
y .get()
.
O si quería unirse a la matriz en una cadena utilizando algún tipo de separador, sólo tiene que añadir .join(" ")
después .get()
, colocando el separador dentro de las comillas.
No estoy buscando padres. Mira aquí: http://jsfiddle.net/9cFTG/1/ '.a' y' .b' no son padres, pero si el usuario hace clic en la intersección, ¡me gustaría tenerlos a ambos! (lo siento, corrigió el enlace) –
@Misha - Entonces, ¿qué está buscando es una lista de todos los elementos que se colocan a través de CSS en el punto en la pantalla donde se realizó el clic? Parece que necesitaría recorrer * cada * elemento en la página y obtener su posición y tamaño, y compararlo con la posición de clic. ¿Estás seguro de que eso es lo que quieres? ¿O puedes limitarlo a ciertas clases de elementos? – user113716
Quiero que el usuario cambie los colores de los elementos en la página. Cuando hace clic en algún elemento, en caso de ambigüedad, debería poder elegir a qué elemento se refería. –