2012-03-02 61 views
0

這是我的第一篇文章,但我一直在使用該網站多年。然而,我堅持什麼應該是一個相當簡單的問題與分頁。我有一組鏈接被填充了PHP,如何獲取jQuery元素的整個HTML

function create_pagination($page,$echo=false) 
    { 
    $max_rows = isset($_SESSION['maxListViewRows']) ? $_SESSION['maxListViewRows'] : 15; 
    $total_rows = isset($_SESSION['total_rows']) ? $_SESSION['total_rows'] : 1; 
    $pages = ceil($total_rows/$max_rows); 

    if($page > $pages) $page = $pages; 

    $start_row = $page == 1 ? 1 : (($page - 1) * $max_rows) + 1; 

    $rows_disp = ($start_row + $max_rows) <= $total_rows ? ($start_row + $max_rows) - 1 : $total_rows; 

    $facility_number_summary = 'Showing ' . $start_row . ' - ' . $rows_disp . ' of ' . $total_rows . ' rows.<br /> <p class="carapg">(MESSAGE IRRELEVANT TO THE QUESTION)</p>'; 

    $pagination_functions = ''; 

    for($i = 1; $i <= $pages; $i++) 
    { 
     $pagination_functions.= $i != $page ? '<a href="javascript:void(0);" id="page_' . $i . '" class="page_link">' . $i . '</a>' 
             : '<span class="page_link" id="page_' . $i . '">' . $i . '</span>'; 
    } 

    $results = array('facility_number_summary'=>$facility_number_summary, 'pagination_functions'=>$pagination_functions); 

    $returned = '<div id="max_left">' . $results['facility_number_summary'] . '</div> 
       <div id="max_right">' . $results['pagination_functions'] . '</div> 
       <div class="break"></div>'; 

    if($echo){ echo $returned; return; } 

    return $returned; 
    } 

在這之後,我解析與jQuery div和壓縮它們。

function draw_pagination(page) 
{ 
if(page == undefined){ 
    page = 1; 
} 
var postData = { 'ajax' : 'pagination', 
        'page' : page    }; 

$.ajax({ 

    type : "POST", 

    url : "/ajax/account.php", 

    data : postData, 

    success : 
     function(data){ 
      $("#fac_results_max").html(data); 
      get_page_count(); 
     } 

}); 

} 

function get_page_count() 
{ 
var count = $("#max_right").children().length; 

if(count < 11) 
    return; 

var content = ''; 
var spacer = false; 

$("#max_right").children().each(
    function(index) 
    { 
     if($(this).html() > 5 && $(this).html() <= (count - 5) ) 
     { 
      $(this).css('display','none'); 
      if(!spacer) 
      { 
       content += '...'; 
       spacer = true; 
      } 
     } 
     else 
     { 
      content += $(this).html(); 
     } 
    } 
); 

$("#max_right").html(content); 
} 

我將採取隱藏的元素,並將它們附加到下拉的div,以便用戶可以從中選擇。我遇到的問題是

content += $(this).html() 

它只返回HTML裏面,因爲我希望它,但我不知道它叫什麼來回報整個的實際HTML元素被'this'所引用。對不起,如果這是一個愚蠢的問題,但我很難過。

在此先感謝您的回覆。

+0

你嘗試過更換'$(本)的.html ()''this.outerHTML'? – NicoSantangelo 2012-03-02 22:40:55

+0

「jquery元素」是一個用詞不當 - 我建議你教育自己知道爲什麼。 – 2012-03-02 22:42:27

+0

@Chris jQuery'Object'有點像它。但克里斯......那真的很有建設性? – Relic 2012-03-02 22:44:25

回答

2

試試這個:

content += $(this).clone().wrap('<div>').parent().html();

據我所知,不存在很好的方式來獲取內容,並使用jQuery元素的標籤,所以我們反而克隆的元素,將它包裝在<div>標籤中,碰到母公司(<div>),然後得到 html。

+0

這在DOM上做了很多工作,但可能會有效。 – Relic 2012-03-02 22:45:42

+1

如果您願意,您也可以刪除克隆! :) – SenorAmor 2012-03-02 22:48:13

+0

這是最簡單的解決方案...除了已經在DOM中有一個虛擬包裝。 – Relic 2012-03-02 23:25:30

0
content += $(this).parent().html(); 

並給元素'這'一個虛擬包裝。

或者也可以嘗試,但它可能是無關的

content += $(this).contents(); 
0

爲什麼不直接使用$( '#目標')追加($(本))。 ?

如果你想要whol元素,而不是第一個孩子的HTML,那麼就使用該元素。

http://api.jquery.com/category/attributes/

+0

你的意思是...只是使用對象。 – Relic 2012-03-02 22:45:09

+0

這樣做是因爲您在.each方法的每次迭代中強制執行重排(可能是重繪),並在最後添加所有內容,從而減少開銷。另外,你不能只是''('#target')。append(this);'? – NicoSantangelo 2012-03-02 22:45:51

0

我沒有看到任何需要將個別元素轉換爲html字符串。只需使用一些數學和slice()方法。 http://api.jquery.com/slice/

編輯:你應該在你的ajax成功插入返回之前做到這一點。可以操縱返回的HTML,而無需插入,然後操作

實例後插入不是100%的微調,但會是這個樣子

function get_page_count() 
{ 
    /* cache jQuery objects when needing to search them again for efficiency*/ 
    var $max=$("#max_right"), $kids=$max.children() 
    var count = $kids.length; 

    if(count < 11) 
     return; 

    var $temp=$('<div/>').append($kids.slice(0,5)).append('...').append($kids.slice(- 5,-1)); 

    $max.html(temp.html()); 
}