我选择页面的一个元素:
$mainSection = $('#main');然后,通过AJAX将更多的元素添加到<div id="main"></div>元素中。下次我调用$mainSection时,新添加的元素也在其中。但我不想那样。我希望变量$mainSection只包含页面初始呈现中的内容。我找不到阻止jQuery更新的方法。
我试过这个:
$(document).ready(function(){
  $mainSection = $('#main').clone(true);然后向#main添加新元素,然后检查它们是否是通过以下方式找到的:
$foundElement = $($mainSection + ":not(:has(*)):not(script):contains('"+newlyAddedContent+"')");在页面加载时,它们不在那里。但在我把它们加进去后,它们就会被找到。
我也试过:
$mainSection = $('#main').html();
$mainSection = $($mainSection);也没起作用。
这里有一个jsFiddle来说明我的观点:
http://jsfiddle.net/VEQ2E/2/
问题就隐藏在这一行中:$foundElement = $($mainSection +$mainSection)
当我这样做的时候,它总是在整个文档中搜索。
发布于 2014-06-13 13:39:56
您的问题不在于您的克隆正在被更改,而是您用来尝试在克隆中查找某些内容的选择器。你的代码是这样的:
$($mainSection + ":not(:has(*)):not(script):contains('"+newlyAddedContent+"')");用字符串连接对象将将对象转换为字符串,简单地说是"[object Object]",然后选择器将只查看":not(:has..."
相反,您应该使用筛选器:
$foundElement = $mainClone.filter(":not(:has(*)):not(script):contains('world')");现在,这将只在$mainClone中查找与该筛选器匹配的项。
JSFiddle
发布于 2014-06-13 12:40:39
您可以使用.clone(true)
$mainSection = $('#main').clone(true);它每次都取这个div初始状态的clone/copy。
注意:
.clone( [withDataAndEvents ] [, deepWithDataAndEvents ] )withDataAndEvents :布尔值(缺省值: false)
deepWithDataAndEvents :布尔值(默认值:withDataAndEvents值)
指示是否应复制克隆元素的所有子元素的事件处理程序和数据的布尔值。
发布于 2014-06-13 12:40:45
您可以采取以下几种方法:
在更新之前缓存#main的内容。这只给出了元素的内容,而没有元素:
mainsectionContents = $('#main').html();或者在更新之前缓存#main的副本。这将为您提供与元素一起的内容,并且取决于您可能希望复制的其他内容,请随意检查api文档。
$mainsectionCopy = $('#main').clone();https://stackoverflow.com/questions/24205487
复制相似问题