我有以下代码,它以html列表格式动态生成目录树。当我尝试使用javascript操作列表项以在项的末尾添加“+”时,它不起作用。我知道jquery是正确的,我已经在同一台服务器上的另一个页面上使用它。是不是jquery无法使用asp.net来操作动态生成服务器端的数据?
<script langauge="C#" runat="server">
string output;
protected void Page_Load(object sender, EventArgs e) {
getDirectoryTree(Request.QueryString["path"]);
itemWrapper.InnerHtml = output;
}
private void getDirectoryTree(string dirPath) {
try {
System.IO.DirectoryInfo rootDirectory = new System.IO.DirectoryInfo(dirPath);
foreach (System.IO.DirectoryInfo subDirectory in rootDirectory.GetDirectories()) {
output = output + "<ul><li>" + subDirectory.Name + "</li>";
getDirectoryTree(subDirectory.FullName);
if (subDirectory.GetFiles().Length != 0) {
output = output + "<ul>";
foreach (System.IO.FileInfo file in subDirectory.GetFiles()) {
output = output + "<li><a href='" + file.FullName + "'>" + file.Name + "</a></li>";
}
}
output = output + "</ul>";
}
} catch (System.UnauthroizedAccessException) {
//This throws when we don't have access, do nothing and move one.
}
}
</script>
然后我尝试使用以下内容操作输出:
<script langauge="javascript">
$('li > ul').not('li > ul > li > ul').prev().append('+');
</script>
只是一个FYI div的代码如下:
<div id="itemWrapper" runat="server">
</div>
答案 0 :(得分:1)
您是否尝试在页面加载后执行JS? 像这样......
$(function(){
$('li > ul').not('li > ul > li > ul').prev().append('+');
});
答案 1 :(得分:0)
看起来你在这里有几个问题。首先,你应该将你的jQuery代码放在$(document).ready中。这可以确保在您尝试使用它之前已经完全加载了DOM。其次,你的选择器正在寻找ul元素的直接子元素。您的代码不会生成任何此类HTML。你有李的内部,但不是相反。此外,如果您的目录中包含文件,您将保留一些未封闭的ul元素,这会弄乱您的HTML和Javascript。