Эта SSCCE заявляет все это:
Test
Copy'n'paste'n'run это, нажмите Add
нажимайте на кнопку несколько раз. При каждом щелчке необходимо видеть HTML-код
обнаружиться в и ожидаемый код должен примерно быть:
Это работает как ожидалось в FF, Chrome, Safari, Opera и IE8.
Однако IE6/7 перестал работать в изменении name
припишите и производит как:
Я погуглил немного и нашел эту очень похожую проблему, он зафиксировал ее и отправил фрагмент кода, как она должна иметь, похожи. К сожалению, это точно, что я уже сделал, таким образом, я подозреваю, что он только тестировал в IE8, не в IE6/7. Кроме той конкретной темы Google не показал много.
Какое-либо понимание? Или сделайте я действительно должен захватить назад к document.createElement
?
Примечание: Я знаю, что могу использовать просто то же название каждого входного элемента и получить их как массив, но вышеупомянутое является просто основным примером, в реальном мне действительно нужно было изменить атрибут имени, потому что это не только содержит индекс, но также и другую информацию, такую как parentindex, упорядочивание, и т.д. Это использовалось для добавления/перестраивания/удаления (sub) пунктов меню.
Править: это связано с этой ошибкой, jQuery (я использую 1.3.2), таким образом кажется, не создает исходные данные тот путь? Следующее действительно просто работает:
$('#add').click(function() {
var ul = $('#ul');
var liclone = ul.find('li:last').clone(true);
var oldinput = liclone.find('input');
var name = oldinput.attr('name').replace(/(foo\[)(\d+)(\])/, function(f, p1, p2, p3) {
return p1 + (parseInt(p2) + 1) + p3;
});
var newinput = $('');
oldinput.replaceWith(newinput);
liclone.appendTo(ul);
$('#showsource').text(ul.html());
});
Но я не могу предположить, что я - единственный, кто встретился с этой проблемой с jQuery. Даже простое $('').attr('name', 'foo')
не работает в IE6/7. JQuery как не является crossbrowser библиотекой, которая, как предполагают, охватила эту конкретную проблему под капотами?
Не ответа, является анализом к вопросу, задаваемым:
<!doctype html>
<html lang="en">
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#add').click(function() {
var ul = $('#ul');
var liclone1 = ul.find('li:last').clone(true);
var liclone2 = ul.find('li:last')[0].cloneNode(true);
var liclone3 = $( ul.find('li:last')[0].cloneNode(true) );
var liclone4 = $( '<li><input type="text" name="foo[88]"></li>' );
var linew = document.createElement("li");
linew.innerHTML = '<input type="text" name="foo[99]">';
$('#showsource').text("");
$('#showsource').text($('#showsource').text() + $(liclone1)[0].outerHTML);
$('#showsource').text($('#showsource').text() + $(liclone2)[0].outerHTML);
$('#showsource').text($('#showsource').text() + $(liclone3)[0].outerHTML);
$('#showsource').text($('#showsource').text() + $(liclone4)[0].outerHTML);
$('#showsource').text($('#showsource').text() + $(linew)[0].outerHTML);
$('#showsource').text($('#showsource').text() + $(ul)[0].outerHTML);
$('#showsource').text($('#showsource').text() + $(ul)[0].innerHTML);
});
});
</script>
</head>
<body>
<ul id="ul">
<li><input type="text" name="foo[0]"></li>
<li><input type="text" name="foo[1]"></li>
</ul>
<button id="add">Add</button>
<pre id="showsource"></pre>
</body>
</html>
Результат:
<LI><INPUT name=foo[1]>
<LI><INPUT name=foo[1]>
<LI><INPUT name=foo[1]>
<LI><INPUT name=foo[88]></LI>
<LI><INPUT name=foo[99]></LI>
<UL id=ul><LI><INPUT name=foo[0]>
<LI><INPUT name=foo[1]> </LI></UL><LI><INPUT name=foo[0]>
<LI><INPUT name=foo[1]> </LI>
Итак, я могу проанализировать его, единственный способ - сделать новый Li с помощью CreateeEdeeDement или создать новую объект с $ (...)
Это сообщение также посвящено этой теме, которое дало мне понимание этой проблемы.
Странное поведение атрибута iframe `name`, установленного jQuery в IE
Интересно, столкнулись ли вы с этой ошибкой в IE (даже с jQuery)?
По сути, в IE вы не можете изменить атрибут имени элементов (обычных или клонированных) (а затем повторно получить к ним доступ через javascript по имени), хотя вы можете отправить их (например, элементы ввода) и успешно отправить их.