name jquery val()
¿Cómo obtengo la expresión de un selector jQuery como texto? (8)
Bueno, todavía estoy tratando de averiguar si estás tratando de obtener el nombre del elemento. o la identificación y / o clase o todo.
Puedes obtener elemento con esto
var element =$(this).get(0); var id = $(this).attr(''id''); var class=$(this).attr(''class'');
no estoy seguro de lo que sucede si tienes más de una clase. podría entrar en una matriz o algo así, y podrías obtener eso con los índices.
Tengo un selector jQuery, que tiene una función encadenada.
Dentro de la función, quiero obtener acceso al TEXTO que representa la expresión para el selector.
$("cat dog").function() {
// how do I get access to the "cat dog" string from inside THIS function ?
};
He simplificado en este código la muestra que realmente quiero hacer. Estoy escribiendo un complemento y necesito acceder al selector para el cual se creó el conjunto envuelto. Obviamente, en este ejemplo en particular tengo acceso a "perro gato" porque lo escribí. Así que imagínense esto en un complemento.
Es un poco complicado google para esto.
edit: la propiedad ''selector'' desafortunadamente ahora está en desuso. http://jquery.com/upgrade-guide/1.9/#selector-property-on-jquery-objects
Hay un atributo ''selector'' en el objeto jQuery, pero no estoy seguro de que esté siempre disponible.
No pude averiguar cómo obtener la referencia al valor de cadena del selector proporcionado dentro de $ (''value_i_want_here'') cuando está vinculado a una función; parece un problema difícil Sin embargo, si prefiere realizar pruebas en IE [x] siempre Firebug Lite funciona muy bien con console.log (var | val).
Si está utilizando firebug, puede console.log(this)
dentro de la función y ver si la cadena del selector está accesible en algún lugar del objeto. Lo siento, no estoy familiarizado con la API de jQuery.
Esto funcionará si desea acceder a la cadena de selector en su función:
$(this).html();
Esto también funcionará si se usan múltiples selectores,
por ejemplo,
$(''#id1,#id2'').click(function(){
alert($(this).html());
});
Esto está lejos de ser óptimo, pero funciona en algunos casos. Usted podría hacer lo siguiente:
jQuery.fn._init = jQuery.fn.init
jQuery.fn.init = function( selector, context ) {
return (typeof selector === ''string'') ? jQuery.fn._init(selector, context).data(''selector'', selector) : jQuery.fn._init( selector, context );
};
jQuery.fn.getSelector = function() {
return jQuery(this).data(''selector'');
};
Esto devolverá el último selector utilizado para el elemento. Pero no funcionará en elementos no existentes.
<div id=''foo''>Select me!</div>
<script type=''text/javascript''>
$(''#foo'').getSelector(); //''#foo''
$(''div[id="foo"]'').getSelector(); //''div[id="foo"]''
$(''#iDoNotExist'').getSelector(); // undefined
</script>
Esto funciona con jQuery 1.2.6 y 1.3.1 y posiblemente con otras versiones.
También:
<div id=''foo''>Select me!</div>
<script type=''text/javascript''>
$foo = $(''div#foo'');
$(''#foo'').getSelector(); //''#foo''
$foo.getSelector(); //''#foo'' instead of ''div#foo''
</script>
Editar
Si revisa inmediatamente después de que se haya utilizado el selector, podría usar lo siguiente en su complemento:
jQuery.getLastSelector = function() {
return jQuery.getLastSelector.lastSelector;
};
jQuery.fn._init = jQuery.fn.init
jQuery.fn.init = function( selector, context ) {
if(typeof selector === ''string'') {
jQuery.getLastSelector.lastSelector = selector;
}
return jQuery.fn._init( selector, context );
};
Entonces, lo siguiente funcionaría:
<div id=''foo''>Select me!</div>
<script type=''text/javascript''>
$(''div#foo'');
$.getLastSelector(); //''#foo''
$(''#iDoNotExist'');
$.getLastSelector(); // #iDoNotExist''
</script>
En tu complemento puedes hacer:
jQuery.fn.myPlugin = function(){
selector = $.getLastSelector;
alert(selector);
this.each( function() {
//do plugins stuff
}
}
$(''div'').myPlugin(); //alerts ''div''
$(''#iDoNotExist'').myPlugin(); //alerts ''#iDoNotExist''
Pero aún:
$div = $(''div'');
$(''foo'');
$div.myPlugin(); //alerts ''foo''
Tal vez esto resuelva tu problema:
var $jqueryItems = $( ".my-selector" );
console.log( $jqueryItems.selector ); // display ".my-selector"
Para aquellos que quieran acceder a la secuencia de selección de complementos que se les da a jQuery, me complace haber mejorado la excelente respuesta de @Pim Jager:
- A partir de ahora (última versión 3.2.1) hay 3 argumentos en la función
jQuery.fn.init
-selector, context, root
- no dos; -
new
palabra clave debe agregarse a la declaración de retorno dejQuery.fn.init
; - Dentro de su complemento, los selectores se devuelven como una cadena llamando a
$(this).getSelector();
Finalmente, eso es lo que tengo que trabajar para mí como un encanto:
(function($, window, document, undefined) {
$.fn._init = $.fn.init
$.fn.init = function( selector, context, root ) {
return (typeof selector === ''string'') ? new $.fn._init(selector, context, root).data(''selector'', selector) : new $.fn._init( selector, context, root );
};
$.fn.getSelector = function() {
return $(this).data(''selector'');
};
$.fn.YOUR-PLUGIN = function() {
var selector = $(this).getSelector(); // selectors string given to jQuery
// other code
}
})(jQuery, window, document);
Por lo que a mí respecta, funciona con las versiones de jQuery (de 1.7.0 a 3.2.1).
PD . Funciona bien incluso con jQuery 1.2.3 disponible aquí en también. Entonces, supongo que lo siguiente está bien para todas las versiones de jQuery si quieres obtener una expresión de selector jQuery como texto dentro del complemento:
// our plugin
(function($, window, document, undefined) {
$.fn._init = $.fn.init
$.fn.init = function( selector, context, root ) {
return (typeof selector === ''string'') ? new $.fn._init(selector, context, root).data(''selector'', selector) : new $.fn._init( selector, context, root );
};
$.fn.getSelector = function() {
return $(this).data(''selector'');
};
$.fn.coolPlugin = function() {
var selector = $(this).getSelector();
if(selector) console.log(selector); // outputs p #boldText
}
})(jQuery, window, document);
// calling plugin
$(document).ready(function() {
$("p #boldText").coolPlugin();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<p>some <b id="boldText">bold text</b></p>