name examples encontrar elemento clase buscar asp.net javascript jquery html

asp.net - examples - jquery selector by name



¿Cómo puedo determinar el tipo de elemento de un elemento coincidente en jQuery? (9)

Estoy haciendo coincidir los elementos generados por ASP.Net con el nombre de ID, pero tengo algunos elementos que pueden aparecer como cuadros de texto o etiquetas dependiendo del contexto de la página. Necesito averiguar si la coincidencia es con un cuadro de texto o una etiqueta para saber si debo obtener los contenidos por val () o por html ().

$("[id$=" + endOfIdToMatch + "]").each(function () { //determine whether $(this) is a textbox or label //do stuff });

Encontré una solución que no funciona, simplemente devuelve "indefinido":

$("[id$=" + endOfIdToMatch + "]").each(function () { alert($(this).tagName); });

¿Qué me estoy perdiendo?


Considere esta solución sin usar cada () :

var elements = $("[id$=" + endOfIdToMatch + "]"); var vals = elements.is("input").val(); var htmls = elements.is("label").html(); var contents = vals.concat(htmls);

Eche un vistazo a la documentación de is .


Esta es la mejor manera de obtener el tipo de elemento

function tgetelementType( elmentid ) { var TypeName = $(''#'' + elmentid).get(0).tagName; var TypeName2 = $(''#'' + elmentid).get(0).type; if($(''#'' + elmentid).get(0).tagName== "INPUT") { return $(''#'' + elmentid).get(0).type.toUpperCase() } else { return $(''#'' + elmentid).get(0).tagName.toUpperCase() ; } }


La primera vez que respondí mi propia pregunta. Después de un poco más de experimentación:

$("[id$=" + endOfIdToMatch + "]").each(function () { alert($(this).attr(tagName)); });

¡trabajos!


Otra solución, posiblemente más elegante, es escribir dos funciones separadas para cada tipo de elemento:

$("input#" + id).each(function() { alert(this + " is an input"); }); $("label#" + id).each(function() { alert(this + " is a label"); });


Solo un jQuery demasiado:

$("[id$=" + endOfIdToMatch + "]").each(function () { alert(this.tagName); });


en jquery 1.6 use prop ()

Ejemplo

var el = $(''body''); if (el.prop(''tagName'') === ''BODY'') { console.log(''found body'') }



también podrías usar algo como esto:

if ($(this).is(''input:checkbox''))

reemplace "this" con cualquier instancia que necesite y "checkbox" con cualquier tipo de entrada que necesite.


$("[id$=" + endOfIdToMatch + "]").each(function(){ var $this=jQuery(this),ri=''''; switch (this.tagName.toLowerCase()){ case ''label'': ri=$this.html(); break; case ''input'': if($this.attr(''type'')===''text''){ri=$this.val();} break; default: break; } return ri; })

La pregunta es, ¿qué piensas hacer después de haber determinado el nombre de la etiqueta? También podría filtrar fácilmente la lista jquery utilizando un selector adicional combinado con .end () para hacer lo mismo:

$("[id$=" + endOfIdToMatch + "]") .find("input:text") .each(function(){ /* do something with all input:text elements */ }) .end() .find("label") .each(function(){ /* do something with label elements */ }) .end()

Esto podría seguir encadenado si necesitara hacer más cosas con esta colección particular de elementos ... al igual que en el ejemplo anterior.

En cualquier caso, tendrías que hacer algo con los valores mientras dentro de las declaraciones de each()