如何在jQuery中确定匹配元素的元素类型?

时间:2008-12-04 20:16:53

标签: asp.net javascript jquery html

我通过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);
});

我错过了什么?

9 个答案:

答案 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);

Have a look at the documentation for is.

答案 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"); });