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);
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'')
}
tagName qué buen consejo. También me gustaría sugerir utilizar tagName.toLowerCase () ya que el valor devuelto depende del tipo de documento (HTML o XML / XHTML).
Ver: http://reference.sitepoint.com/javascript/Element/tagName
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()