fn.从这个扩展不获取选择器



我有一个fn像这样扩展函数

$.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(),我需要的值,而不是它的父对象,它返回没有值。当我尝试console.log(this)在sval中,我得到

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()在"this"不工作从sval内部,我确信它很简单,我做错了什么

你实际上没有使用输入的值这是在:

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

如果我们重新格式化这个(讨厌一行符的众多原因之一;易于隐藏bug):

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

你实际上并没有使用这个值,所以val仍然是空的,我们去寻找子元素的值。

试题:

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

最新更新