fn.extend没有得到选择器

时间:2014-08-21 13:10:56

标签: jquery

我有像这样的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内部工作,我确定它很简单我做错了什么

1 个答案:

答案 0 :(得分:2)

你实际上并没有使用调用它的输入值:

if(val == '' || val == undefined) $(this).val();

如果我们重新格式化(讨厌单行的众多原因之一;容易隐藏错误):

if (val == '' || val == undefined) 
  $(this).val();

你实际上并没有使用那个值,所以val仍然是空的,我们会去搜索孩子的价值。

尝试:

if (val == '' || val == undefined) 
  val = $(this).val();