1

チェックボックスをループして、アコーディオン メニューの上部に結果のリストを作成するコードを設定しました。各用語の横にある [X] をクリックすると、それらは自分自身を削除し、関連するボックスのチェックを外します。ただし、タグを削除しても、リストの先頭にある区切りのカンマとコロンは残ります。私はこれに対処するための面倒な方法を持っていますが、もっとクリーンで高速になる可能性があると感じていますが、思いついた解決策では構文エラーが発生し続けます。

var divBlock = $(this).closest("h3 + div"); //finds parent h3 + div
aObject = divBlock.prev().find("a:first"); //gets the a link in the h3
originaltitle = aObject.html();

var liItems = divBlock.find("li");
for (var i = 0; i < liItems.length; i++) {
    if (liItems[i].childNodes[0].checked) {
        var searchterm = liItems[i].childNodes[1].innerHTML;
        categoryString += "<div class='choice'>" + searchterm + "<a href=\"javascript:void(0);\" class=\"delete_search_term\" id=\"close_" + searchterm.replace(/\s/g, "-") + "\">(x)</a>,</div> ";
    }
}

if (originaltitle.indexOf(": ") > 0) {
    originaltitle = originaltitle.substring(0, originaltitle.indexOf(":"));
}

if (categoryString.length > 0) {
    categoryString = categoryString.substring(0, categoryString.lastIndexOf(",")) + "</div>";
    aObject.html(originaltitle + ": " + categoryString);
} else {
    aObject.html(originaltitle.replace(":", "").trim());
}

そのコードは、文字列の作成と句読点の配置を処理して、リストをフォーマットします。次のコードは、サブサブコードをコメントアウトしない限り、エラーをスローするすべてをごちゃまぜにするようなものです。

$("a.delete_search_term").click(function () {
    window.location = $(this).attr('href');
    var itemName = this.id.replace("close_", "").toLowerCase();
    var liItems = $(this).closest("h3").next().find("li");
    for (var i = 0; i < liItems.length; i++) {
        if (liItems[i].childNodes[0].id == itemName) {
            liItems[i].childNodes[0].checked = false;
        }
    }
    if (categoryString.length > 0) {
        categoryString = categoryString.substring(categoryString.lastIndexOf(","));
        subsub = categoryString.substring(0, 1);
        $(subsub).remove();
    }
    $(this).parent().remove(); //Removes parent of selected object only
    return false;
});

リクエストにより JSFiddle を作成しました: http://jsfiddle.net/w4AxR/1/

4

2 に答える 2

0
subsub = categoryString.substring(0,1);
$(subsub).remove();

substring は文字列を返します$(X).remove()。セレクターが必要です......subsub に id が含まれている場合は do

$('#'+subsub).remove();

またはクラス文字列

$('.'+subsub).remove();

[編集] 実際には....substring(0,1)は単一の文字を返します....それはそのような意味ですか?

于 2013-08-14T15:17:13.877 に答える