0

我正在使用以下代码:

$('#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:Finding the type of an element using 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()
    }
});

但我收到了这个错误:

类型错误:e 未定义

为什么?

解决方案

最后,在测试了我通过乔的所有解决方案之后,结果如下(请随时提出任何建议)

$('#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;
});
4

5 回答 5

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/

于 2013-09-09T16:34:01.410 回答
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();
  }
});
于 2013-09-09T17:28:00.210 回答
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
        }
    });
于 2013-09-09T16:36:18.753 回答
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"));
    }
});
于 2013-09-09T16:29:53.633 回答
0

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

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

于 2013-09-09T16:31:45.250 回答