jquery 添加li 实现 $(li).append(menu_list[attr].data).append("<ul></ul>").appe

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery 添加li 实现 $(li).append(menu_list[attr].data).append("<ul></ul>").appe相关的知识,希望对你有一定的参考价值。

for循环做出来就是一个二叉树的效果.如图.
$(li).append(menu_list[attr].data).append("<ul></ul>").appendTo(parent);

我现在想在每一个文字都变成超链接. 但是却不知道怎么用代码实现了,求大神指教~
PS: 我尝试 前面加一个A标签 ,但是出来的效果就是,后面的<ul>也被添加到<a></a>里面了.
$(li).append(a).append(menu_list[attr].data).append("<ul></ul>").appendTo(parent);
for (var attr in menu_list)
//如果有子节点,则遍历该子节点
if ( menu_list[attr].children != undefined && menu_list[attr].children.length > 0)
//创建一个子节点li
var li = $("<li></li>");

....

//将空白的ul作为下一个递归遍历的父亲节点传入
showall(menu_list[attr].children, $(li).children().eq(0));

else
$("<li></li>").append(menu_list[attr].data).appendTo(parent);


$(document).ready(function()

 var tmp = '';

 $('li').each(function()

  tmp = $(this).html();

  $(this).html(tmp.replace(tmp,"<a href='#'>"+tmp+"</a>"));

 );

);

追问

思路不错,但是有一点是遇到下面情况就行不通了.

1
2aa

追答$(document).ready(function()

 var tmp = '';

 $('li').not(":has('ul')").each(function()

  tmp = $(this).html();

  $(this).html(tmp.replace(tmp,"<a href='#'>"+tmp+"</a>"));

 );

);

追问

能解决大部分问题,但是还是有一部分不能解决
比如下面例子中的 "1","aa"会成功加上超链接
但是"2"就不能加了.

1
2aa

追答$(document).ready(function()

 var tmp = '';

 $('li').not(":has('ul')").each(function()

  tmp = $(this).html();

  $(this).html(tmp.replace(tmp,"<a href='#'>"+tmp+"</a>"));

 ).end().has('ul').each(function()

  tmp = $(this).html();

  $(this).html(tmp.replace(/([^<]*)/,"<a href='#'>$1</a>"));

 );

);

参考技术A 拼字符串appendTo不行吗?
$("<a href="#"><li>"+menu_list[attr].data+"<li></a>").appendTo(parent);

类似这样啊,不过你明白你的.append("<ul></ul>").是什么意思。追问

因为我是迭代的,这些节点都是动态, 我后面加这个意思后面有子节点,就先把拼接上去,等下一个循环的时候直接插就可以了.

若是你那样可以写,那么我直接写成这样就好了
$(''+menu_list[attr].data+'').appendTo(parent);

追答

和迭代没有什么关系吧。换一个思路试试,说不定豁然开朗。
你的这个ul是不是可以换个方法添加啊。
PS: 我尝试 前面加一个A标签 ,但是出来的效果就是,后面的也被添加到里面了
能不能给个例子啊,你现在的代码运行完是什么样的,你想要什么样的,不加ul什么样啊。

追问

写不了那么多字

我补充问题了.
...就是这一句: $(li).append(menu_list[attr].data).append("").appendTo(parent);
另外
.append("")是给子节点用的.所以不能删除
麻烦你了.

追答

$(li).append(menu_list[attr].data).appendTo(parent);

$("").appendTo(parent);

你改成这样行吗?

下个循环找不到,是吧。

那你想办法换个写法,看看能不能找到ul 啊。
showall(menu_list[attr].children, $(li).children().eq(0));

改一下这块的写法吧。

参考技术B $(li).append(a).append(menu_list[attr].data).end().end().append("<ul></ul>").appendTo(parent);追问

不行,第一个end()就结束了. 这个是个添加操作,end应该是: end() 方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态。

jquery 动态添加li的索引值

是这样的,我写个jq来动态添加li
可是添加上的li获取不到索引值,是哪里错了还是哪里不对?大神帮帮忙
$(function()
$("a").click(function()
for(var i=0;i<8;i++)
$("ul").append("<li></li>");
;
);
$("li").click(function()
alert( $("li").index(this));
)
)
抱歉,不要说index()不需要this
我只是想知道怎么才能获取新添加的li的索引值
ps:是动态添加的li的索引值,原有的li可是获取到,就是新添加的获取不到

参考技术A 先把你的代码贴上来看看

$(ul").append("<li></li>");少半个引号追问

贴上了,您看看

追答

$(ul").append("");少半个引号

追问

·~~~这是我刚才弄的,有点匆忙,少打了,跟这个没关系

追答

index()这个方法不需要this
还有应该是
$(this).index()

$("li").click(function()
alert($(this).index())
);

追问

~~~~我可以获取最开始原有li的索引值,就是获取不到动态新添加li的索引值

追答

完全可以

本回答被提问者采纳
参考技术B $("li").live("click", function ()
alert($(this).index());
)
用live()方法

以上是关于jquery 添加li 实现 $(li).append(menu_list[attr].data).append("<ul></ul>").appe的主要内容,如果未能解决你的问题,请参考以下文章

用jQuery实现简单的DOM操作

h5+css3+jquery实现web app界面及简单功能

jquery 怎么获得动态添加后的子元素个数

jquery 动态添加li的索引值

jquery如何实现点击LI标签和下面的LI互换顺序?

jquery判断是不是添加样式