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

CMP*_*mer 72 html javascript asp.net jquery

我通过ID名称匹配ASP.Net生成的元素,但是我有一些元素可以呈现为文本框或标签,具体取决于页面上下文.我需要弄清楚匹配是否是文本框或标签,以便知道是通过val()还是通过html()获取内容.

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

我找到了一个不起作用的解决方案,只返回"undefined":

$("[id$=" + endOfIdToMatch + "]").each(function () {
    alert($(this).tagName);
});
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Tom*_*lak 92

只是一个jQuery太多了:

$("[id$=" + endOfIdToMatch + "]").each(function () {
    alert(this.tagName);
});
Run Code Online (Sandbox Code Playgroud)

  • 或者`$(this).get(0).tagName` (12认同)
  • @Znarkus:没错,但没有意义.;) (4认同)
  • 不,不是在这种情况下.但是如果你有一个带有jQuery对象的变量,这将是你必须要做的:) (2认同)
  • 不。如果你有一个 jQuery 对象,你会使用 `$(anything)[0]`。 (2认同)

Chr*_*vén 32

不使用each()就考虑这个解决方案:

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

看看文档是什么.


Jel*_*gab 24

你也可以使用这样的东西:

if ($(this).is('input:checkbox'))
Run Code Online (Sandbox Code Playgroud)

将"this"替换为您需要的任何实例,将"checkbox"替换为您需要的任何输入类型.


CMP*_*mer 6

我第一次回答自己的问题.经过一些实验:

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

作品!

  • 还有一个jQuery太多了.:-)你有DOM元素已经"this",不需要再包装它! (3认同)