2012-03-02 3 views
0

Это мой первый пост, но я использую этот сайт годами. Тем не менее, я застрял на том, что должно быть довольно простой проблемой с разбиением на страницы. У меня есть группа ссылок заселяется с PHP,Как получить весь html элемента jquery

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; 
    } 

И после этого, я разобрать DIV с JQuery и сжимать их.

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 всех элемент, на который ссылается «это». Извините, если это глупый вопрос, но я в тупике.

Заранее благодарим за ваши ответы.

+0

вы пробовали заменить '$ (это) .html() 'by' this.outerHTML'? – NicoSantangelo

+0

«Элемент jquery» является неправильным произношением - я предлагаю вам просвещать себя, чтобы знать, почему. –

+0

@Chris jQuery «Объект» немного больше похож на него. но Крис ... был ли это действительно конструктивным? – Relic

ответ

2

Попробуйте это:

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

AFAIK, не существует хороший способ получить содержимого и теги элемента с помощью JQuery, так что вместо этого мы клонировать элемент, завернуть его в тегах <div>, поднять до родителя (<div>), а затем получить его html.

+0

Это много работает над DOM, но может быть эффективным. – Relic

+1

Вы также можете удалить клон, если хотите! :) – SenorAmor

+0

Это самое простое решение ... кроме уже имеющего фиктивную оболочку в DOM. – Relic

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

И дать элементу 'this' фиктивную обертку.

Или же попробовать, но это может быть не связан

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

Почему бы просто не использовать $ ('# целевой') добавляет ($ (это)). ?

Если вам нужен элемент whol, а не HTML первого ребенка, тогда просто используйте этот элемент.

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

+0

вы имеете в виду ... просто используйте этот объект. – Relic

+0

Выполняя это, вы вынуждаете оплату (и, возможно, перерисовку) на каждой итерации метода .each, добавляя все в конце, это меньше накладных расходов. Кроме того, не могли бы вы просто сделать '$ ('# target'). Append (this);'? – NicoSantangelo

0

Я не вижу необходимости включать отдельные элементы в строки html. Просто используйте метод math и 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()); 
} 
Смежные вопросы