自定义jQuery函数 - 选择器找不到元素

时间:2012-09-22 18:24:29

标签: javascript jquery

我正在玩一个REST API,我正在研究一些javascript函数 这里的想法是运行例如:$('#main').get('car/ford');,返回的数据将添加到提供的元素中。

以下是所有javascript:

$.fn.extend({
    get: function (path) {
        request(this, 'GET', path);
    }
});

function request(element, type, path) {
var dees = $(element);
    $.ajax({
        type: type,
        url: '/request/'+path,
        success: function(data) {
            console.log('Success');

            a = $(element);
            b = $('#fileList'); // this is a control

            dees.html(data);
        }
    });
}

(function() {
    console.log('running');
    $('#fileList').get('car/ford');
})();

我遇到的问题是当我跑a.html(data);时 什么都不会改变。但如果我运行b.html(data); 一切都像它应该的那样。

因此这两个选择器之间存在差异 在a元素上找不到a.length == 0
在b上找到元素b.length == 1

为什么选择器找不到元素,我该如何解决?

3 个答案:

答案 0 :(得分:2)

通过在调用函数前添加$来解决问题。

自:

(function() {
    console.log('running');
    $('#fileList').get('car/ford');
})();

要:

$(function() {
    console.log('running');
    $('#fileList').get('car/ford');
});

答案 1 :(得分:1)

element更改为$(element)

当请求被调用request(this, 'GET', path);时,这表示javascript对象,它应该是jQuery对象。您需要传递jquery对象或在传递之后将其转换为jquery对象。

$.fn.extend({
    get: function (path) {
        alert(this.tagName);
        var objToPass = $(this);  
        request(objToPass, 'GET', path);
    }
});
function request(javascriptObj, type, path) {  
    element = $(javascriptObj);   
    $.ajax({
        type: type,
        url: '/request/'+path,
        success: function(data) {
            console.log('Success');

            a = $(element);
            b = $('#fileList'); // this is a control

            a.html(data);
        }
    });
}

更新

应该在document.ready上实例化对get函数的调用,这可以通过简单地添加$

来完成

更改

(function() {
    console.log('running');
    $('#fileList').get('car/ford');
})();

$(function() {
    console.log('running');
    $('#fileList').get('car/ford');
})();

答案 2 :(得分:1)

您可以尝试以下方法:

function request(element, type, path) {
   var dees = $(element);
   $.ajax({
           type: type,
           url: '/request/'+path,
           success: function(data) {
               console.log('Success');
               dees.html(data);
           }
   });
}

如果$(this)变量与$(this)块的自ajax()变量发生冲突。