Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象-对象中的对象-这些对象的数组_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 对象-对象中的对象-这些对象的数组

Javascript 对象-对象中的对象-这些对象的数组,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我是javascript新手,所以让我先说一下 我经常访问的网站在一个表中有50个左右的项目,以及关于该项目的详细信息。每个表行包含几个td单元格。有些行具有类似的类型,如USB驱动器或其他。我想捕捉每一行,这样我就可以根据自己的喜好对它们进行分组和重新排序 我有一个目标: function vnlItemOnPage(){ this.Category = "unknown"; this.ItemClass = "vnlDefaultClass"; this.ItemBlock =

我是javascript新手,所以让我先说一下

我经常访问的网站在一个表中有50个左右的项目,以及关于该项目的详细信息。每个表行包含几个td单元格。有些行具有类似的类型,如USB驱动器或其他。我想捕捉每一行,这样我就可以根据自己的喜好对它们进行分组和重新排序

我有一个目标:

function vnlItemOnPage(){
  this.Category = "unknown";
  this.ItemClass = "vnlDefaultClass";
  this.ItemBlock = {};
}
这表示一行

我一直想弄清楚的是如何捕获html
块,然后将其保存到
this.ItemBlock

这一部分相当简单:

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

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

这部分我被卡住了:

总共有50个,所以我需要一个vnlItemOnPage数组

vnlAllItems = ???

var vnlAllItems = [vnlItemOnPage]?
还有,我如何向数组中添加和从数组中删除?如果这很复杂,我可能不会从数组中删除,不用麻烦了

捕获html后,我可以将其附加到表元素中,如下所示:

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

如果你认为我从错误的方向着手,我愿意接受任何建议。性能不是什么大问题——至少现在是这样。稍后,我可能会尝试将几页合并成几百个项目

谢谢你的帮助

[编辑]

也许问题的第二部分是如此的基本以至于很难相信我不知道答案

数组可以是:
var vnlalitems=[]

然后就是: var row1=新的vnlItemOnPage; vnlalitems.push(第1行); var row2=新的vnlItemOnPage; row2.ItemBlock=element.getElementByClassName('className')[0]

我想结束这个问题,但我讨厌在没有处理阵列的情况下这样做。

是您的朋友

这将为您提供所需表格正文中第一行的内部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();
};

享受吧

不确定它是否是您要查找的,但如果我想操作表行,我会存储:

  • 行的整个html
    1…n
    作为字符串,这样我可以快速重建行
  • 对于每一行,存储实际的单元格值
    [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);
}  
要获取单元格值数组,可以使用:

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);
}  

谢谢你,尼古拉斯。获取tr html不是问题。我已经有了这方面的代码,我可以操作行和行中的数据。我已经下载并提供了jquery,但我还没有准备好处理它。一旦我用javascript完成了扩展,我计划用jquery和一个ui脚本(比如yui)对其进行改进,使其更好、更好看。@Darin--这听起来是个不错的计划,但实际上是个糟糕的计划。如果您现在花时间使用jQuery,它将把您的项目时间减少一半。正是这种工作使得jQuery变得更加容易。诚然,它也有助于创建跨浏览器UI,但需要操纵HTML——这就是jQuery中的查询。正如我所说,我愿意接受所有建议。尼古拉斯并没有真正回答我的主要问题。我已经有了捕获tr的代码。谢谢Hogan。如果您想将
从一个表移动到另一个表或在表中移动,jQuery提供了大量DOM操作方法:
before()
after()
append()
appendTo()
prepento()
insertBefore()
insertAfter()
。before/after方法将DOM节点作为目标的同级插入。append/prepend方法将DOM节点作为目标的子节点插入。每一种的多种风格都与参考点有关:内容或目标节点。如果你想对表进行排序,我认为最好使用一些表排序器插件(有很多),比如,我不是真的要对表进行排序,而是抓住每一行,按照我希望的方式重新构建一个新表。谢谢你的链接,我相信这会在某个时候派上用场。@serg-你认为chrome扩展标签不合适吗?这是一个扩展,我无法访问服务器端的HTML。这看起来像是一个纯javascript问题,无论是否使用chrome扩展,都不会改变任何事情。您要求的是js解决方案,因此很明显,在服务器端更改html不是一个选项。如果你愿意,可以随意添加标签。可以只是好奇你的推理。谢谢,太好了!我喜欢你所拥有的。那么一个数组(?)或者另一个包含vnlItemOnPage对象的对象呢?