【问题标题】:jQuery 1.2.6 cachingjQuery 1.2.6 缓存
【发布时间】:2009-08-05 13:16:10
【问题描述】:

我在我的应用程序中进行了大量的 DOM 操作,添加了新节点,我发现 children() 函数可能会不同步。我有一个有两行的 tbody 元素,我使用 children() 函数对这些行进行一些操作。然后我在 tbody 中再添加两行,当我再次使用 children 函数进行更多操作时,我只取回原来的两行,而不是这些加上我刚刚添加的两行。我每次都在给孩子打电话,不依赖任何变量来自动更新。有什么方法可以清除 jQuery 的缓存 - 我已经用选择器多次注意到这样的问题,并通过进一步选择 DOM 树然后向下导航来解决它(即不要使用 jQuery CSS 选择器选择 tbody,选择表格然后执行 table.tBodies[0].rows),但在这种情况下不起作用。

谢谢, 菲尔

【问题讨论】:

  • 你为什么不更新到最新版本的jQuery?

标签: javascript jquery


【解决方案1】:

children() 函数不会失去同步。如果您更改了 DOM,则必须再次执行该操作。在修改时,您可以有一个回调来重新制作您的匹配元素数组。这不是缓存机制,就像 JavaScript 的工作原理:线性。 Ajax 调用有时会被缓存,但这里似乎并非如此。

推荐 始终使用最新版本的 jQuery:现在是 1.3.2。

更新。所以这是你的代码:

function removeGroup() { 
    var groupNodes = [ $('#row1')[0], $('#row2') ];  // is this correct? 
    var parent = groupNodes[0].parentNode; 
    if ( $(parent).children().length > 2) { 
        parent.removeChild(groupNodes[0]); // why not use dirrectly $('#row1')[0].remove();?
        parent.removeChild(groupNodes[1]); // same here
    } else { 
        alert("Can't delete last group"); 
    } 
} 

这段代码与缓存无关,其中大部分甚至通过 jQuery。 更好地解释你想做什么并且会去做。

【讨论】:

  • 感谢您的回复。不幸的是,jQuery的版本是强加给我的,如果可以的话,我会更新!肯定有某种缓存正在进行,因为我每次都调用 $(myNode).children,而不依赖于一些旧值,但是 $(myNode).children 返回两个 tr 元素,而 $(myNode).rows 返回四个tr 元素。我现在已经放弃了 jQuery 的方式,只是去使用 rows 集合。
  • 抱歉 - 这是 myNode.rows,而不是 $(myNode).rows!
  • 我们能看一个简化的例子吗?
  • 当然:函数 removeGroup() { var groupNodes = [ $('#row1')[0], $('#row2') ]; var parent = groupNodes[0].parentNode; if ($(parent).children().length > 2) { parent.removeChild(groupNodes[0]); parent.removeChild(groupNodes[1]); } else { alert("不能删除最后一个组");当有人点击一个按钮时,这个函数会被调用,但是 children() 函数似乎没有反映最新版本的 DOM 树
  • 啊,忘了这里去掉了回车 - 你能把它弄出来吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2012-03-06
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多