0

head请在以下 3 行代码中解释 var 发生了什么(以及使用),而不是偶然发现它(我的理解有限) 。

<script type="text/javascript">
  var head = $("thead#tHead1").clone().removeAttr("class");
  $(head).find("#hRow2").remove();
  head = $(head).wrap("<thead>").parent().html();

编辑在第1 行设置然后将 head 分配给另一个值$(head)之后,在第 2 行代码上 使用有什么意义?head =

查看我学到的答案。

4

3 回答 3

2
// Find an element, make a copy of it, and remove it's class
var head = $("thead#tHead1").clone().removeAttr("class");

// Within the cloned element (not on the DOM yet),
// Find an element within and then remove that found element.
$(head).find("#hRow2").remove();

// Wrap the cloned element in another element, giving it a parent.
// Traverse to that parent and return it's html content
head = $(head).wrap("<thead>").parent().html();

请注意$(head)这里不需要。那可以简单地head代替。您不需要将元素转换为 jQuery 包装的对象,因为它应该已经是一个。


此外,这是一个糟糕的代码。做它应该做的任何事情都是对 DOM 的一个笨拙的黑客攻击。相反,您应该使用某种模板引擎根据一些输入数据根据需要生成新的 DOM 片段。

于 2013-02-07T21:46:54.293 回答
1

我将引导您完成以下工作:

  1. 一个开始<script>标签,顺便说一下,它不需要type属性。

  2. 找到<thead>id 的tHead1元素,复制包含子节点的元素,并class从新元素中删除属性,然后将新元素分配给head变量。

  3. hRow2删除我们之前创建的元素中 id的元素。

  4. 将我们之前创建的元素包装在一个thead元素中,并将head变量重新分配为等于该 '' 元素的 innerHTML。

于 2013-02-07T21:49:38.757 回答
0

从评论和进一步研究中,我认为这可以更好地写成:

var head = $("#tHead1").clone().removeAttr("class");   // clean & clone the head  
head.find("#hRow2").remove();                          // remove 2nd row
head = head[0].outerHTML;                              // get 'only' the desired html

为了回答我自己的问题,(我不确定术语)head =在这种情况下最后一个是必要的,不显示[object Object]. 它不是一个对象,而是分配所需的 HTML(标题行),以便稍后在代码中使用几行。console.log(head)揭示了这个教训。我也不确定为什么不能将第 1 行和第 2 行链接起来,所以这是尽可能干净的。

这个练习的更高目的是在打印之前将一个大表分成单独的(45 行)表,在后续页面上只有 3 个标题行中的 2 个可见,并且不联系服务器或重新加载页面。我的方法是在第 n 行添加一个页尾类,完成上述操作,然后在该行之后 appendTo() 新表和标题。

于 2013-02-08T14:05:09.593 回答