3

在下面的代码中,我绑定了 span 的 click 事件,以便它触发 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事件。

要获取最近的编辑器内容,您应该使用以下内容

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

您可以使用 vanilla 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 回答