我一直在努力解决这个问题好几个小时而没有太多运气。我先问一下我的具体问题,但是如果我的整个方法出错了,那就给大家看一下。
具体问题: 我正在尝试用一些结束标记替换列表项元素。下面的第一个IF语句可以工作,第二个IF语句在“html”变量中使用很多值,但是只要我将一个结束div标记粘贴到变量中,替换就不会发生。我无法弄清楚。我已经尝试使用1-2反斜杠转义结束标记中的斜杠并且没有帮助(使用两个反斜杠进行替换,但文本在页面上呈现而不是代码)。
$("li.class1").each(function() {
var li = $(this);
var span = li.find("span.class2").text();
if (span.indexOf("<") == 0) {
var text = $(this).text();
text = text.substring(1, text.length);
li.replaceWith('<li><div><ul><li class="Mheader">' + text + '</li>');
}
else if (span.indexOf(">") == 0) {
var html = '</ul></div></li>';
li.replaceWith(html);
alert(html);
}
});
现在,说了..我注意到FireBug在第一次替换后显示结束标签,即使我还没有插入它们。我希望这只是FireBug很聪明并插入它们因为它们丢失了。
我实际上想要实现的目标: 我们有一个应用程序将一些普通的弹出导航菜单呈现为一个大的,垂直的,无序的列表。我想在此列表中插入一些特殊格式的组名(如下所示),然后使用jquery替换那些特殊格式的组名,以有效地将这些“组”切换为DIV。然后我将使用CSS水平布局每个组,以创建一些基本的超级菜单功能。以下示例与我上面的源代码相关。
jquery调整后的所需标记:
<ul>
<li>
<div>
<ul>
<li class=header>header1</li>
<li>item1</li>
.....
</ul></div>
</li>
感谢您的任何反馈。当我需要这样的信息时,这是我的首选网站,但这是我第一次不得不问!
谢谢,
托米
答案 0 :(得分:0)
自动插入结束标记。
你可以以某种方式使用.wrapInner,或做类似的事情:
html = '';
$("li").each(function() { // I removed the class as I don't know if each li has one or if only headers, etc.
var li = $(this);
var span = li.text(); // Same here.. removed the class
if (span.indexOf("<") == 0) {
var text = $(this).text();
text = text.substring(1, text.length);
html += '<li><div><ul><li class="Mheader">' + text + '</li>';
}
else if (span.indexOf(">") == 0) {
html += '</ul></div></li>';
} else {
html += '<li>' + li.html() + '</li>';
}
});
$('ul').html(html);