我通过ID名称匹配ASP.Net生成的元素,但是我有一些元素可能会呈现为文本框或标签,具体取决于页面上下文。我需要弄清楚匹配是文本框还是标签,以便知道是通过val()还是通过html()来获取内容。
$("[id$=" + endOfIdToMatch + "]").each(function () {
//determine whether $(this) is a textbox or label
//do stuff
});
我找到了一个无效的解决方案,它只返回“undefined”:
$("[id$=" + endOfIdToMatch + "]").each(function () {
alert($(this).tagName);
});
我错过了什么?
答案 0 :(得分:92)
只是一个jQuery太多了:
$("[id$=" + endOfIdToMatch + "]").each(function () {
alert(this.tagName);
});
答案 1 :(得分:32)
在不使用 each():
的情况下考虑此解决方案var elements = $("[id$=" + endOfIdToMatch + "]");
var vals = elements.is("input").val();
var htmls = elements.is("label").html();
var contents = vals.concat(htmls);
答案 2 :(得分:24)
你也可以使用这样的东西:
if ($(this).is('input:checkbox'))
将“this”替换为您需要的任何实例,将“checkbox”替换为您需要的任何输入类型。
答案 3 :(得分:6)
我第一次回答自己的问题。经过一些实验:
$("[id$=" + endOfIdToMatch + "]").each(function () {
alert($(this).attr(tagName));
});
作品!
答案 4 :(得分:3)
tagName多好的提示。我还建议使用tagName.toLowerCase(),因为返回的值取决于文档类型(HTML或XML / XHTML)。
请参阅:http://reference.sitepoint.com/javascript/Element/tagName
答案 5 :(得分:3)
在jquery 1.6中使用prop()
var el = $('body');
if (el.prop('tagName') === 'BODY') {
console.log('found body')
}
答案 6 :(得分:1)
这是获取元素类型的最佳方式
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() ;
}
}
答案 7 :(得分:1)
$("[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;
})
问题是,在确定标签名称后,您打算做什么?您可以使用与.end()结合的附加选择器轻松过滤jquery列表来执行相同的操作:
$("[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()
如果您需要使用此特定元素集合进行更多操作,这仍然可以链接...就像上面的示例一样。
在任何一种情况下,你都必须在each()
陈述内部对值进行处理
答案 8 :(得分:0)
另一种解决方案,可以说更优雅,是为每种元素类型编写两个独立的函数:
$("input#" + id).each(function() { alert(this + " is an input"); });
$("label#" + id).each(function() { alert(this + " is a label"); });