2011-05-20 251 views
2

我是JavaScript新手,所以让我直接说一下。对象 - 对象中的对象 - 这些对象的数组

我经常有一个网站有50个左右的项目,并在表中列出了有关该项目的详细信息。每个表格行包含多个td单元格。有些行具有类似的东西,比如USB驱动器或其他类型的东西。我想捕捉每一行,以便我可以对它们进行分组和重新排序以适应我的口味。

我有这样的对象:

function vnlItemOnPage(){ 
    this.Category = "unknown"; 
    this.ItemClass = "vnlDefaultClass"; 
    this.ItemBlock = {}; 
} 

这代表一行。

我一直在想的是如何捕获html < tr>stuff< /tr>的块并将其保存到this.ItemBlock

这部分非常简单:

vnlItemOnPage.ItemBlock = element.getElementByClassName('className')[0] 

这似乎很直截了当。我错过了什么吗?

这部分我坚持:

将会有50他们,所以我需要vnlItemOnPage的阵列?

vnlAllItems = ??? 

var vnlAllItems = [vnlItemOnPage]? 

而且,我将如何添加到数组中并从数组中删除?我可能不会从数组中删除,如果这是复杂的不要打扰它。

一旦我抓住< TR> HTML,我就可以将其追加到表元素,像这样:

myTable.appendChild(vnlAllItems[0].ItemBlock); 

正确?

如果您认为我从错误的方向接近这一点,我乐于接受任何建议。性能不是一个大问题 - 至少现在。后来我可能会尝试为几百个项目混合几页。

感谢您的协助!

[编辑]

也许这个问题的第二部分是如此基本,很难相信,我不知道答案。

该阵列可以是:var vnlAllItems = []

然后它只是: VAR ROW1 =新vnlItemOnPage; vnlAllItems.push(row1); var row2 = new vnlItemOnPage; row2.ItemBlock = element.getElementByClassName('className')[0];

我想关闭这个问题,但我讨厌这样做,没有关于处理数组的东西。

+0

如果你想,我想你会排序表使用一些桌面分类器插件(有很多),比如http://sandbox.scriptiny.com/sorter/index.html – serg 2011-05-20 21:30:53

+0

好吧,我并不真正要对表格进行排序,按照我想要的方式排列并重建一张新桌子。感谢您的链接,但我相信这在某些时候会派上用场。 – Darin 2011-05-20 21:35:20

+0

@serg - 你不认为铬扩展标签是合适的?这是一个扩展,我无法访问服务器端的HTML。 – Darin 2011-05-20 21:50:50

回答

1

JQuery是你的朋友在这里。

这会给你第一行内HTML中所需的表体:

var rowHtml = $('table#id-of-desired-table tbody tr:first').html() ; 

要获得外部HTML,你需要一个jQuery的扩展方法:

jQuery.fn.outerHTML = function() { 
    return $('<div>').append(this.eq(0).clone()).html(); 
}; 

用法很简单:

var rowHtml = $('table#id-of-desired-table tbody tr:first').outerHtml() ; 

Enjoy!

+0

谢谢尼古拉斯。获得tr html不是问题。我已经有了解决这个问题的代码,我可以操纵行中的数据和数据。 – Darin 2011-05-20 20:50:55

+0

如果可能,我想纯粹用javascript来做这件事。我有jquery下载和可用,但我还没有准备好解决它。一旦我的扩展与JavaScript解决了,我打算用jquery和ui脚本(比如yui)来修改它,以使它更好看。 – Darin 2011-05-20 20:53:49

+0

@Darin - 这听起来像一个很好的计划,但它是一个糟糕的计划。如果你现在花时间使用jQuery,它会将你的项目时间缩短一半。正是这种工作让jQuery变得更容易。不错,它也有助于制作跨浏览器用户界面,但操纵HTML - 即jQuery中的查询。 – Hogan 2011-05-20 21:37:20

1

不知道这是你在找什么,但如果我想操纵表中的行我会存储:

  • 行的整个HTML <td>1</td>...<td>n</td>为字符串,所以我可以迅速重建该行
  • 对于每一行存储实际单元格值[1, ..., n],所以我可以做一些操作与值(排序)

要获得行作为HTML,你可以使用:

var rowHtml = element.getElementByClassName('className')[0].innerHTML; 

要获得单元格的值的数组,你可以使用:

var cells = []; 
var cellElements = element.getElementByClassName('className')[0].cells; 
for(var i=0;i<cellElements.length;i++) { 
    cells.push(cellElements[i].innerText); 
} 

所以保存这一切看起来像对象:

function vnlItemOnPage(){ 
    this.Category = "unknown"; 
    this.ItemClass = "vnlDefaultClass"; 
    this.RowHtml = ""; 
    this.RowCells = []; 
} 
+0

优秀!我喜欢你拥有的东西。那么数组(?)或者另一个包含vnlItemOnPage对象的对象呢? – Darin 2011-05-21 00:24:43

+0

@Darin我不确定。 – serg 2011-05-21 00:48:43