2012-05-17 83 views
2

我有一个脚本,当单击按钮时做了很多事情,并且还重命名了一些元素,所以起初我使用第一个脚本,而且我有时看到工作,有时候看不到,所以将其更改为第二个脚本并且所有的时间都很完美,但是有一个问题。这两个脚本是否一样?有什么区别,而不是我所有的脚本,我只是把第一个替换成第二个。两个相同的jQuery脚本具有不同的行为

这是第一个脚本

$(CloneTarget).find(':input[name="' + MainName + '"]').attr('name', NewSelectName); 

和第二单:

$(CloneTarget).find(':input').each(function() { 
    if ($(this).attr('name') == MainName) { 
     $(this).attr('name', NewSelectName); 
    } 
}); 

哪里是与第一个问题呢?

编辑

而且我用这个:

$(CloneTarget).find(':input[id="' + MainId + '"]').attr('id', NewSelectId); 

而且每一件事工作得很好,我真的很困惑在这里,不得不提的是MainNameMainId是如此的相似,如:MainName = Model.Phones[0]MainId = Model_Phones[0]是差异大约是.人物还是其他东西?

+0

什么“不起作用”的第一个脚本? – Joseph

+0

你也可以给HTML部分,只是要清楚。 – Niranjan

+0

@Saeid,'.'字符可能会被误认为是类选择器的开始,但从jQuery 1.7开始看起来并不是这样。你在使用图书馆的早期版本吗? –

回答

7

是的,有区别。您的第二个代码段执行元素的name属性与值MainName之间的字符串比较。第一个将MainName的值直接注入到Attribute Equals选择器中。

因此,如果MainName恰好包含的第一个片段会失败:

  • 一个单引号字符'
  • 双引号字符"
  • ,需要在选择转义字符,例如如[\
+0

这太棒了,我认为我的'MainName'与您的描述类似,但我使用它没有任何问题,我更新问题 – Saeid

+0

但是你不应该用这些引号给名称并将字符转义为输入名称。这是第一件事。 – Niranjan

+1

@ngen,理论上是的,但是PHP开发人员有时会在组件[something]中命名复选框或单选按钮,以便服务器端代码接收包含为这些元素提交的值的数组。 –

相关问题