如何使用jQuery确定哪种类型的DOM元素

时间:2013-09-09 16:27:38

标签: javascript jquery

我使用以下代码:

$('#product-create-step-2 input, #product-create-step-2 img').each(function() {             
  // I should check here if element is input or img
  // If element is input I should get $(this).val()
  // If element is img I should get $(this).attr('src')
  var type = $(this).attr("type");
  if ((type == "checkbox" || type == "radio") && $(this).is(":checked")) {
    inputValues[$(this).attr('id')] = $(this).val();
  } else if (type != "button" || type != "submit") {
    inputValues[$(this).attr('id')] = $(this).val();
  }
});

如何检查我拥有哪种DOM元素才能获得正确的值?

我知道在jQuery中有一个函数:is()但是从SO中获取的示例:使用jQuery查找元素的类型是针对一个元素而不是列表。

更新

这是我正在处理的代码:

var inputValues = [];
$('#product-create-step-2 input, #product-create-step-2 img').each(function(i, e) {
    e = $(e);

    if (e.is("input")) {
        var type = $(this).attr("type");
        if ((type == "checkbox" || type == "radio") && $(this).is(":checked")) {
            inputValues[$(this).attr('id')] = $(this).val();
        }
        else if (type != "button" || type != "submit") {
            inputValues[$(this).attr('id')] = $(this).val();
        }
    } else if (e.is("img")) {
        inputValues[$(this).attr('id')] = $(this).attr()
    }
});

但是我收到了这个错误:

  

TypeError:e未定义

为什么?

最后,经过测试后,我通过Joe的所有解决方案,这是结果(随意提出任何建议)

$('#product-create-step-2 input, #product-create-step-2 img').each(function(i, e) {
    var that = $(this);
    var thatis = this.src || this.value;
    inputValues[that.attr('id')] = thatis;
});

5 个答案:

答案 0 :(得分:2)

你可以试试这个:

$('#product-create-step-2 input, #product-create-step-2 img').each(function() {        
    var myVar = this.value || this.src;
});

注意:src 是某些输入类型的有效属性,因此只有在您的输入都没有设置该属性时,此属性才有效。否则,这将完美地工作,因为img没有value属性,并且(大多数)输入没有src

如果您的某些输入 具有src属性,请查看Logan的答案。

这里有效:http://jsfiddle.net/9Kerf/1/

答案 1 :(得分:0)

喜欢这样

$('#product-create-step-2 input, #product-create-step-2 img').each(function(e) {             
    e = $(this);
    if(e.is("input")) {
        console.log(e.val());
    } else if(e.is("img")) {
        cosole.log(e.attr("src"));
    }
});

答案 2 :(得分:0)

您可以使用typeof(N)来获取实际的对象类型。

要获取元素标记名称,请使用elem.tagName或elem.nodeName。

答案 3 :(得分:0)

试试这个

    $('#product-create-step-2 input, #product-create-step-2 img').each(function(i) {             
        var thisElem = $(this);
        if(thisElem.is("input")) {
            //get its val
        } else if(thisElem.is("img")) {
            //gets its src
        }
    });

答案 4 :(得分:0)

尝试以下代码

$('#product-create-step-2 input, #product-create-step-2 img').each(function() {             

  var isImage= $(this)..get(0).tagName == "IMAGE";
var isInput = $(this)..get(0).tagName == "INPUT";
  if (isImage) {
    var requiredval = $(this).attr('src');
  } else if (isInput ) {
   var requiredval = $(this).val();
  }
});