从类找到的元素中获取元素类型

时间:2014-04-06 22:52:42

标签: javascript jquery html class

我试图创建一个能够获得"值的函数"任何类型的具有特定类的任何类型的元素(textarea,span,......等等)

要做到这一点,我需要测试我目前处理哪种元素,我可以用alert($('#gdocDump').prop('tagName'));轻松完成,但出于某种原因,如果我使用var varElems=$(".feedback");获取同一类的所有元素,尝试循环测试每一个像var elementType = elem.prop('tagName');,我得到错误" TypeError:elem.prop不是一个函数"

  1. 为什么会这样?
  2. 显然存储在jQuery对象中的元素由 $(" .feedback")与查看每个不完全相同 单独?
  3. 我需要更改var elementType = elem.prop('tagName');才能在下方正常工作?
  4. 的jsfiddle: Testing Ground

    HTML

    <textarea id="gdocDump" class="feedback area" rows="1" cols="22" ></textarea><br />
    <input id="scaleSlider" class="feedback" type="range"value="1" min="1"  max="9" step="1"/><br />
    <span id="command1" class="feedback">This is a span</span><br />
    <span id="command2" class="feedback">This is a span</span><br /><br />
    <input type="button" id="sendFeedback" value="Feedback"/><br /><br /><br /><br />
    <input type="button" id="test" value="Test a specific element"/>
    

    使用Javascript:

    $("#sendFeedback").click(function() {
            composeAndCallEmail();
    });
    
    
    $("#test").click(function() {
            alert($('#gdocDump').prop('tagName'));
    });
    
    
    
    function composeAndCallEmail() {
        var varElems=$(".feedback");
        var feedback=[];
        $(varElems).each(function(index, element) {
            feedback.push(getElemContents(element))
        });
    }
    
    function getElemContents(elem){
        var elementType = elem.prop('tagName');
        //this is where the problem occurs
        if(elementType=='INPUT')return elem.val();
        //... will add more here later
    }
    

2 个答案:

答案 0 :(得分:3)

each(index, element)内,参数是索引和本机DOM元素

$(varElems).each(function(index, element) { 
    feedback.push(getElemContents(element)) // plain DOM element, not jQuery
});

这意味着您必须再次包装它或使用本机elem.tagName属性

function getElemContents(elem){
    var elementType = $(elem).prop('tagName');
    if ( elementType.toLowerCase() === 'input' )
           return $(elem).val();
}

答案 1 :(得分:2)

如上所述,您在DOM节点上调用jQuery方法prop();而是使用elem.tagName

同样在getElemContents()中,您应该使用.value而不是.val()。最后,这应该给你:

function getElemContents(elem){
    var elementType = elem.prop.tagName;
    if(elementType=='INPUT')return elem.value;
    //... will add more here later
}

JS Fiddle demo