从jQuery post数据而不是object获取原始元素标记

时间:2016-12-24 12:16:29

标签: javascript jquery html json

我正在尝试从jQuery post数据中获取orignal DOM元素,如下所示:

.done(function (data) {
  if (data !== "UsernameError") {
    StopLoading();
    var dbtb = $('<table />').append(data).find('#datatable-responsive').html();

    // Convert the table into a javascript object                            
    var table = $(data).find('#datatable-responsive').get(0).tableToJSON(); 
    console.log(table);


    $('#datatable-responsive').dataTable({"bDestroy": true});
    var header = $('<div />').append(data).find('.bs-glyphicons').html();
    $('.bs-glyphicons').html(header);
    $('#tableProducts thead, #header').fadeIn("slow");
    $('#emptyText').hide();
  }
  else {
    StopLoading();
    ShowMessage("No eBay user was found under: " + $('.txtSearch').val());
  }
})

这是有问题的部分:

   var table = $(data).find('#datatable-responsive').get(0).tableToJSON(); // Convert the table into a javascript object
  console.log(table);

我正在使用jQuery扩展表到json库将html转换为JSON,然后将其提取到数据表中。由于datatable只接受JSON作为数据源,我需要以某种方式转换它。

当我这样做时:

$(data).find('#datatable-responsive').get(0)

这会返回原始DOM元素(它自己的表),但是,表到json只接受实际的选择器作为第一个参数,如下所示:

$('#tableid').tableToJSON(); <<< correct way

对于我来取实用表:

$(data).find('#datatable-responsive').get(0).tableToJSON()

or 

$(data).find('#datatable-responsive')[0].tableToJSON()

上述两种方法给出了以下错误:

Error: tableToJSON is not a function

我该如何解决这个问题?

@Rajaprahbu使用时:

   console.log($(data).find('#datatable-responsive').eq(0));

我正在获取对象而不是本机DOM元素......仍然是:/

Edit2:这是插件本身的链接:

https://github.com/lightswitch05/table-to-json

1 个答案:

答案 0 :(得分:0)

你的例子在这里和那里都是一个小细节。

console.log($(data).find('#datatable-responsive').eq(0));确实会返回一个jQuery对象,而不是一个DOM元素,但这就是你需要的。

$(data).find('#datatable-responsive').get(0)和$(data).find(&#39; #datatable-responsive&#39;)[0]`都返回一个DOM元素但是不是你是什么的需要的。

应该简单地说:

var table = $(data).find('#datatable-responsive').tableToJSON(); 

应该通过返回空白结果来满足不匹配,或者返回表格的JSON。

其他选项包括:

var table = $(data).find('#datatable-responsive').eq(0).tableToJSON(); 
var table = $(data).find('#datatable-responsive').first().tableToJSON(); 

一些注释:

  • .get(0)返回jQuery集合中的第一个DOM元素。 [0]也是如此。
  • .eq(0)返回jQuery集合中的第一个DOM元素,但包含在自己的jQuery对象中。
  • $(data)只是将您加载的内容转换为分离的DOM元素。
  • 请勿使用ID标识动态加载内容中的元素。使用类来确保不会出现重复项。