2013-01-22 123 views
3

在下面的代码中,我绑定了跨度的click事件,以便它触发checkTOC函数。jQuery获取元素html的更新值()

在该函数中,我在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> 
+0

你为什么要拆分HTML?计数元素有很多有效的方法。 – undefined

+0

好点我确定,但我正在计算具体的评论标签,这不是真正的dom级别“元素”... –

+0

计数评论是计算它们的唯一方法吗?你确定更新的内容有评论吗? – undefined

回答

0

你可以遍历香草JS的DOM或者说,#content的孩子递归节点,并检查他们的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 

Fiddled

话虽这么说,我同意上司的评价,有处理任务的更好的方法,如果你有超过标记控制。

0

alert(count)总是返回相同的值。同样的, 警报(jQuery的(“#内容”)HTML()) -

这里的问题是,编辑内容不在jQuery('#content')归因于TinyMCE的创建在编辑器初始化CONTENTEDITABLE IFRAME这是事实然后用于编辑内容。这个问题被写回几个锡蒂姆事件。

要得到你应该使用最近的编辑内容如下

$(tinymce.get('your_editor_id').getBody()).html(); 
+0

事实上,alert(jQuery('#content')。html())确实包含编辑器的内容。然而,它的陈旧内容并不新鲜。 –

+0

这就是我所说的:它是旧内容 - 使用我提供的代码来获得实际的代码 – Thariama