2012-02-21 17 views
22

Al llamar a un complemento personalizado, ¿cómo puedo obtener la cadena del selector actual?Obtiene la cadena del selector jQuery actual?

$('my_selector p').my_plugin(); 

Me gustaría dar salida my_selector p dentro de mi secuencia de comandos. ¿Cómo puedo acceder a esta cadena?

+1

duplicado de http://stackoverflow.com/questions/500246/how-do-i-get-a-jquery-selectors-expression-as-text – jbabey

Respuesta

34

Puede utilizar selector propiedad:

$('my_selector p').selector // my_selector p 

versión en desuso:1.7, Eliminado:.1.9

+8

Esto está en desuso desde jQuery 1.7 - busque la respuesta tibc-dev. – skz

+0

@skz tiene razón, el selector de propiedades jQuery fue ** obsoleto desde 1.7 ** y ** eliminado en 1.9 **: [propiedad jQuery .selector (Eliminado, Obsoleto)] (https://api.jquery.com/selector /) – AlbertFM

+9

En lugar de indicar que está en desuso y eliminado, qué tal si nos dice cuál es la alternativa adecuada. – Studocwho

2
jQuery.fn.getSelector = function() { 
     return this.data('selector'); 
}; 
+1

+1 para mostrar cómo extender jquery. usar como $ ('someSelector'). getSelector(); – mindandmedia

+3

Tengo 'undefined' en mi caso (jQuery v2.2.4). – 10basetom

12

Mensaje selector de desaprobación v 1.7:

Si sólo está tratando con los identificadores y clases como selectores se puede utilizar lo siguiente:

var selector = (typeof($(this).attr('id')) !== 'undefined' || $(this).attr('id') !== null) ? '#' + $(this).attr('id') : '.' + $(this).attr('class'); 

Hay formas más limpias pero ya que la eliminación de .Selector debido a ser inconsistentes entre los navegadores desde 1,7, esto ha sido mi ir.

+1

¿Qué pasa si $ (this) .attr ('clase') devuelve más de una sola clase? esto haría un selector no válido, en su lugar debería hacer '.' + $ (this) .attr ('class'). split ("") .join ("."). – vasilevich

+0

También si el selector es algo así como '.unique-class-123 p strong.help' solo devolvería '.help' – CodeBrauer

1

con el sector obsoleto yo uso

index = document.getElementById('category').value 
select = $("#category option[value=#{index}]")[0].innerHTM 

sólo dos líneas de código

o si usted es realmente barato con líneas

select = $("#category option[value=#{document.getElementById('category').value}]")[0].innerHTML 
1

consideran obsoletos, el consejo oficial es añadir el selector como parámetro en su llamada de función: https://api.jquery.com/selector/

Los complementos que necesitan usar una cadena de selector dentro de su complemento pueden requerirlo como un parámetro del método. Por ejemplo, un plug-in "foo" podría escribirse como

$.fn.foo = function(selector, options) { /* plugin code goes here */ }; 

y la persona que utiliza el plugin escribiría

$("div.bar").foo("div.bar", {dog: "bark"}); 

redundante, sí, pero siempre es fiable.

Cuestiones relacionadas