3

以下のコードでは、スパンのクリック イベントをバインドして、checkTOC 関数を起動します。

その関数では、一致した要素の数を count 変数に格納しています。ページの読み込み後にコンテンツが変更されない限り、これはうまく機能します。ただし、count の値は、#content div へのポスト ページ ロードの変更によって影響を受けるようには見えません。

カウントが #content html の更新された値を反映するようにコードを変更するにはどうすればよいですか?

if(typeof jQuery!="undefined")
    {
        jQuery(document).ready(function($)
        {

        var checkTOC = function()
        {
            //find the count of <!--nextpage--> elements
            var count = jQuery('#content').html().split("&lt;!--nextpage--&gt;").length - 1;

            alert(count);//ALWAYS RETURNS THE INITIAL COUNT, REGARDLESS IF ACTUAL COUNT IS CHANGED AFTER PAGE LOAD VIA HTML EDITING

            var pageurl = jQuery("#view-post-btn a").attr("href");
            var htmlStrTOCpre = jQuery("#cb2_customTOC").text();
            var htmlStrTOC  = '<summary>Table of Contents</summary>\n';
            htmlStrTOC += '<ol>\n';
            htmlStrTOC += '    <li><a href="'+pageurl+'">Introduction</a></li>\n';

            for (var i = 2; i < count+2; i++) {
                htmlStrTOC += '    <li><a href="'+pageurl+i+'/">Page'+i+'</a></li>\n';
            }

            htmlStrTOC += '</ol>';

            jQuery("#cb2_customTOC").val(htmlStrTOC);
        }

        jQuery("#cb-toc-click").bind("click", checkTOC);

        });
    }

HTML コード

<span id="cb-toc-click">Paste Table of Contents</span>
4

2 に答える 2

0

alert(count)は常に同じ値を返します。alert(jQuery('#content')。html())と同じ– </ p>

ここでの問題は、jQuery('#content')tinymceがエディターの初期化時にコンテンツ編集可能なiframeを作成し、それがコンテンツの編集に使用されるため、エディターのコンテンツが含まれていないことです。この続きは、いくつかの小さなイベントで書き戻されます。

最近のエディターコンテンツを取得するには、次を使用する必要があります

$(tinymce.get('your_editor_id').getBody()).html();
于 2013-01-23T09:58:33.213 に答える
0

バニラ JS または#contentの子ノードを使用して DOM を再帰的にトラバースし、それらのelement.nodeType値を確認できます。それが同等である場合Node.COMMENT_NODE(または単に8マジック ナンバーを好む場合 ;) は、コメントを扱っていることを意味します。それを念頭に置いて、あらゆる種類のロジックを構築できます。

var commentCount = 0;
//anonymous function to be called recursively
(function(D) {
    //if this is a comment, increment the counter
    8===D.nodeType&&commentCount++;
    //call the same function recursively for every child node
    D=D.firstChild;
    while (D) {
        arguments.callee(D);
        D=D.nextSibling;
    }
})(document.getElementById('content'));//start with #content

いじられた

そうは言っても、マークアップを制御できる場合は、タスクを処理するより良い方法があるというコメントに同意します。

于 2013-01-23T02:21:20.240 に答える