ASP.NET生成的输出不受JQuery / Javascript的影响

时间:2013-02-19 18:10:51

标签: c# jquery asp.net css

我有以下代码,它以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>

2 个答案:

答案 0 :(得分:1)

您是否尝试在页面加载后执行JS? 像这样......

$(function(){ 
    $('li > ul').not('li > ul > li > ul').prev().append('+');
});

答案 1 :(得分:0)

看起来你在这里有几个问题。首先,你应该将你的jQuery代码放在$(document).ready中。这可以确保在您尝试使用它之前已经完全加载了DOM。其次,你的选择器正在寻找ul元素的直接子元素。您的代码不会生成任何此类HTML。你有李的内部,但不是相反。此外,如果您的目录中包含文件,您将保留一些未封闭的ul元素,这会弄乱您的HTML和Javascript。