2010-06-24 61 views
2

希望可以帮助,尝试Jquery克隆似乎工作,但我得到“多个”克隆而不是单个克隆“重制”按钮上。jquery克隆多个实例为什么

如:我想克隆这样的:

echo '<select class="hello">'; 
    foreach ($pageposts as $post): 
    echo '<option>'.$post->post_title.'</option>'; 
    endforeach; 
    echo '</select>'; 
从WordPress的这一

echo '<input type="button" id="rp" value="add">'; 

是的点击

和Yes的 “你好” 类是从jQuery页面

我jQuery的功能是:

$j=jQuery.noConflict(); 
$j(document).ready(function() { 
$j('#rp').click(function(){ 
$j('.hello').clone().appendTo('#goodbye'); 
}); 
}); 

所以我的“总体代码片段”是这样的:

echo '<select class="hello">'; 
foreach ($pageposts as $post): 
echo '<option>'.$post->post_title.'</option>'; 
endforeach; 
echo '</select>'; 
echo '<div id="goodbye"></div>'; 
echo '<input type="button" id="rp" value="add">'; 

我克隆“曾经”在第一次新闻,但随后进入的倍数,即:

1点击给出1个克隆加上1个原 - 我想

点击2次给了3个克隆加上1原 - 我要我要1个原件及2

3次点击给出7个克隆加上1原不是什么 - 我要我要原件1份加3 不算什么等等

建议请。由于

回答

6

这是因为你的选择是寻找类:

$j('.hello') 

每当你克隆和追加此为要添加另一个.hello元素另一个元素,因此你的每一个.hello元素,它可以找到克隆。

也许你应该删除的类名时,它被克隆:

$j('.hello').clone().removeClass('hello').appendTo('#goodbye'); 

或者甚至改变它:

$j('.hello').clone().removeClass('hello').addClass('cloned_hello').appendTo('#goodbye'); 

您可能要添加不同的类,所以你的CSS仍然可以工作,但最终这就是为什么你得到多个克隆项目。

+0

谢谢ILMV - Durrrr当然我像往常一样缺失明显。 – user351657 2010-06-24 14:57:34

+0

再次感谢ILMV--你明显比我更快,你把我打败了.removeClass('hello')方面。非常感谢,问题解决了 – user351657 2010-06-24 15:00:28

+0

ILMV - 只是一个快速笔记,我接受“答案” - 有时候我发现“答案”不是答案 - (不同于你的)不能按下按钮几分钟。然而! – user351657 2010-06-24 15:02:11

1

该行为是正常的,因为您克隆了其中包含hello类的每个元素。

试试这个:

$j('.hello').clone().attr("class","cloned").appendTo('#goodbye'); 

,你把你的CSS在.cloned在.hello相同。

希望它有帮助:)

+0

您不应该使用'.attr'方法来添加/编辑/删除属性中的类,因为您可能会有多个类,而您的方法会覆盖其他类。相反,使用'.addClass'和'.removeClass' :-) – 2010-06-24 15:02:01

+0

这里只有一个类,所以它不覆盖任何东西,但我同意它一般不是最好的! – 2010-06-24 15:03:35

+0

在某些情况下,addClass/removeClass在任何时候都不能始终如一地工作。在我的特殊情况下,将课程改为不同的课程是最好的解决方案。特别是,创建克隆的缓存变量是产生不一致结果的原因。在jQuery中,你总是希望尽可能以绝对值工作。通过这种方法,您可以随时在您重写的课程中重新添加。 – 2016-04-13 20:39:21