既存の UL に基づいて、モバイル デバイス用の選択ドロップダウン メニューを構築しています。これは、古いバージョンの jQuery (1.4.1) で正常に機能していました。ただし、jQuery をバージョン 1.9.1 に更新したところ、コードがメニューを壊してしまいました。壊れているセクションは、実際には現在表示しているセクションの子メニューです。
var mobileMenu = function (menuParent, prevSibling) {
var $select = $('<select>', {
class: 'mobileMenu'
}).insertAfter(prevSibling);
$(menuParent).each(function () {
var $li = $(this),
$a = $li.find('> a'),
$p = $li.parents('li'),
prefix = new Array($p.length + 1).join('-');
var $option = $('<option>')
.text(prefix + ' ' + $a.text())
.val($a.attr('href'))
if ($(this).hasClass("selected")) {
$option.attr('selected', true);
}
$option.appendTo($select);
if ($(this).hasClass("selected")) {
mobileSubNav($select);
}
});
$(".mobileMenu").change(function () {
window.location = $(this).find("option:selected").val();
});
};
var mobileSubNav = function (navContainerName) {
$('.main_nav_sub li').each(function () {
var $li = $(this),
$a = $li.find('> a'),
$p = $li.parents('li'),
prefix = new Array($p.length + 1).join('-');
var $option = $('<option>')
.text(prefix + '--' + $a.text())
.val($a.attr('href'));
$option.before(navContainerName);
});
}
最後から 3 行目の before() メソッドのようです。jQuery バージョン 1.9 のアップグレード ガイドには、「親のないノードで .after()、.before()、または .replaceWith() を使用しようとしても効果がない」と記載されています。これは、親要素がまだ dom に追加されていないため、スクリプトが壊れているということですか? 誰かが何が起こっているのかを明らかにし、それを修正するために私を指摘できますか?
ありがとう