我试图创建一个能够获得"值的函数"任何类型的具有特定类的任何类型的元素(textarea,span,......等等)
要做到这一点,我需要测试我目前处理哪种元素,我可以用alert($('#gdocDump').prop('tagName'));
轻松完成,但出于某种原因,如果我使用var varElems=$(".feedback");
获取同一类的所有元素,尝试循环测试每一个像var elementType = elem.prop('tagName');
,我得到错误" TypeError:elem.prop不是一个函数"
var elementType =
elem.prop('tagName');
才能在下方正常工作?的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
}
答案 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
}