【问题标题】:ASP.NET Generated Output Not Effected By JQuery/JavascriptASP.NET 生成的输出不受 JQuery/Javascript 影响
【发布时间】:2013-02-19 18:10:50
【问题描述】:

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

仅供参考,div 的代码如下:

<div id="itemWrapper" runat="server">
</div>

【问题讨论】:

  • 修复如下:将 [output = output + "
    • " + subDirectory.Name + "
    • ";] 更改为 [output = output + "
      • " + subDirectory.Name;] 将 [output = output + "
      ";] 更改为 [output = output + "
    ";]

标签: c# jquery asp.net css


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我同意您的上述陈述,代码不在我提交帖子的计算机上,我必须手动输入。我只是忘记输入 output = output + " " 在 foreach 文件结束之前。顺便说一句,我很欣赏您的评论,因为您提供了答案!在包含子列表之前,我正在关闭
    • 。感谢您的帮助!
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签