我有像这样的fn.extend函数
$.fn.extend({
sval: function(){
var val = $(this).text();
if(val == '' || val == undefined) $(this).val();
var elem = $(this).children().first();
if (val == '' || val == undefined) val = $(elem).text();
if (val == '' || val == undefined) val = $(elem).val();
return val;
}
});
这是我的第一个扩展函数,用于尝试获取对象的文本,无论是输入还是span或p或其他带有文本的对象。
这适用于几个不同的功能,比如这个
function rowObj(item, pre){
//check if this is a tr
var tag = item.tagName;
var row = item;
if(pre == undefined){
pre = '';
}
if(tag != 'TR'){
row = $(item).closest('tr');
}
var obj = {};
$(row).find('.rowcell').each(function(){
var keystr = $(this).attr('class');
var keyarr = keystr.split(" ");
var key = keyarr[0];
obj[pre+key] = $(this).sval();
});
return obj;
}
抱歉我的缩进副本和过去不保留它,但无论如何这有效我的延伸转到它的孩子并获得价值 这让我很困惑 如果我尝试在对象上使用sval(),我需要来自它的父对象的值而不是它返回的值。当我尝试在sval中调试console.log(this)时我得到
console.log(val)
//$('.invsearch').sval()
[prevObject: m.fn.init[1], context: document, selector: ".invsearch", jquery: "1.11.1", constructor: function…]
//$(item).sval(); --- item is from <input class="invsearch" oninput="searchinv(this)"/>
[prevObject: m.fn.init[1], context: document, selector: "", jquery: "1.11.1", constructor: function…]
在两种情况下使用.val()on&#34; this&#34;不能在sval内部工作,我确定它很简单我做错了什么
答案 0 :(得分:2)
你实际上并没有使用调用它的输入值:
if(val == '' || val == undefined) $(this).val();
如果我们重新格式化(讨厌单行的众多原因之一;容易隐藏错误):
if (val == '' || val == undefined)
$(this).val();
你实际上并没有使用那个值,所以val
仍然是空的,我们会去搜索孩子的价值。
尝试:
if (val == '' || val == undefined)
val = $(this).val();