0

以下のコードは、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>
4

2 に答える 2

1

ページが読み込まれた後にJSを実行してみましたか?このようなもの ...

$(function(){ 
    $('li > ul').not('li > ul > li > ul').prev().append('+');
});
于 2013-02-19T18:18:51.967 に答える
0

ここでいくつか問題があるようです。まず、jQueryコードを$(document).ready内に配置する必要があります。これにより、DOMをいじる前に、DOMが完全にロードされていることが保証されます。次に、セレクターはli要素の直接の子であるul要素を探しています。あなたのコードはそのようなHTMLを生成しません。liはulの中にありますが、その逆はありません。また、ディレクトリにファイルが含まれている場合は、いくつかのul要素を閉じないままにしておくと、HTMLとJavascriptが台無しになります。

于 2013-02-19T18:43:09.910 に答える