JQuery div选择器问题 急急急急急急
- JScript code
var PathSet = $(this).attr('p'); var folderPathSize = PathSet.substring(1, PathSet.length).split('/'); var folderPath = PathSet; var arrayPath = new Array(); var num = 0; if(folderPathSize.length > 1) { for(j = 0; j < folderPathSize.length; j++) { if(j != folderPathSize.length - 1) { folderPath = folderPath.substring(0, folderPath.lastIndexOf('/')); arrayPath[num] = folderPath; num = num + 1; } } arrayPath.reverse(); } arrayPath[num] = PathSet; for(k = 0; k < arrayPath.length; k++) { alert(arrayPath[k]); //正常输出 var PathLink = $("<a>"); PathLink.append(arrayPath[k].substring(arrayPath[k].lastIndexOf('/') + 1)); PathLink.bind('click', function() { alert(arrayPath[k]); //输出undefined //$(".leftBlock").remove(); //******* 需要处理的地方 }); $('#track').append(" -> "); $('#track').append(PathLink); } });
Question1 : 为什么第2个alert输出undedined 怎么能正常输出
Question2 : //$(".leftBlock").remove(); 这行代码 我想要的效果是 remove 所有在 class=leftBlock且id=arrayPath[k] 之后的DIV。
请大家帮看看,多谢。
[解决办法]
- JScript code
//这样试试for (k = 0; k < arrayPath.length; k++) { alert(arrayPath[k]); //正常输出 var PathLink = $("<a>"); PathLink.append(arrayPath[k].substring(arrayPath[k].lastIndexOf('/') + 1)); PathLink.tmp = arrayPath[k]; //定义个属性,值设为array[k] PathLink.bind('click', function() { alert(this.tmp); }); $('#track').append(" -> "); $('#track').append(PathLink);}
[解决办法]
- JScript code
for(k = 0; k < arrayPath.length; k++) { alert(arrayPath[k]); //正常输出 var PathLink = $("<a>"); PathLink.append(arrayPath[k].substring(arrayPath[k].lastIndexOf('/') + 1)); PathLink.bind('click', function([color=#FF0000]此处需要传参或者将这个click方法写成闭包[/color]) { alert(arrayPath[k]); //输出undefined //$(".leftBlock").remove(); //******* 需要处理的地方 }); $('#track').append(" -> "); $('#track').append(PathLink); }
[解决办法]
[解决办法]
你这id属性值也太不规范了。。
- JScript code
//var a = '\'#' + arrayPath[k] + '\'';var a = '#' + arrayPath[k];//如果上面的方法不行的话,先用js获取这个元素对象再转为jQuery对象试试var a = '#' + arrayPath[k];PathLink.bind('click', function() { var obj = document.getElementById(a.substring(1)); $(obj).remove();});
[解决办法]
[解决办法]
$(dom).nextAll('div').remove();
[解决办法]
[解决办法]
JS闭包传值真心难理解啊。。。用with{}语句可以解决你遇到的问题。你的代码不方便测试,另写了个小例子说明一下:
- HTML code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title><script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script><script type="text/javascript">$(document).ready( function() { var obj = document.getElementsByTagName('span'); for (var k = 0; k < obj.length; k ++) { with({k:k}) { $(obj[k]).bind('click', function() { alert(k); }); } }});</script></head><body><span>111</span><span>222</span><span>333</span></body></html>