jan*_*mon 6 jquery internet-explorer clone
我试图克隆一个div并更改此div中输入字段的名称.它适用于大多数浏览器,但IE 7不会更改输入字段的name属性.
HTML
<body>
<pre></pre>
<div><input value="Hello World" name="test"></div>
</body>
Run Code Online (Sandbox Code Playgroud)
JS
var lastRow = $("body div:last"),
newRow = lastRow.clone(true)
.show()
.insertAfter(lastRow);
newRow.find('input').attr("name","test2");
$("pre").text( newRow[0].innerHTML );
Run Code Online (Sandbox Code Playgroud)
结果:
Firefox :(有效)
<input value="Hello World" name="test2">
IE8(作品)
<INPUT value="Hello World" name=test2 jQuery1273063250500="4">
IE7(错误):
<INPUT value="Hello World" name=test jQuery1273063303968="4">
如您所见,IE7的名称不会更改为test2.
有没有明显的理由或解决方法?
我现在可以修复它。只要输入字段未附加到 dom,您就可以更改名称并且单选按钮再次正常工作。
// Old Code
$("div:last").clone(true).children("input").attr("name","newName");
// New Code
$("div:last").clone(true).children("input").fixCloneBug ("newName");
Run Code Online (Sandbox Code Playgroud)
为了降低执行时间,仅复制 jQuery 事件、className 和 type 属性。
修复CloneBug方法:
(function( $ )
{
if ( ! $.browser.msie || parseInt( $.browser.version ) > 7 )
// NO FIX FOR IE 7+ FF WEBKIT
$.fn.fixCloneBug = function( newName ){ return this.attr( "name", newName ) };
else
// FIX IE 5-7
$.fn.fixCloneBug = function( newName )
{
var $cloned = $();
this.each(function( )
{
/* -._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._
Create a new element with className and jQuery events of the buggy element
*/
var $elem = $(this),
$newElem = $(document.createElement( $elem.attr('tagName') ));
// USE SAME TYPE
$newElem.attr('type', $elem.attr('type') );
// SET NAME
$newElem.attr('name', this.name );
$newElem.attr('name', newName );
// ADD TO DOM
$newElem.insertBefore( $elem );
// CLONE EVENTS
$newElem.data( "events", $elem.data("events") );
// CLASS NAME
$newElem.attr('className', this.className );
/* -._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._
Delete buggy element
*/
$elem.remove();
// Add to result
$cloned.push($newElem);
})
return $cloned;
}
}(jQuery));
Run Code Online (Sandbox Code Playgroud)
也许你认为$newElem.attr('name', this.name );没用,但它允许我使用 jQuery 1.4 功能:
.fixCloneBug (function(i,oldname){ return oldname+"_new" })
| 归档时间: |
|
| 查看次数: |
7148 次 |
| 最近记录: |