Как получить весь HTML-элемент JQuery - PullRequest
0 голосов
/ 03 марта 2012

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

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

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

Ответы [ 4 ]

2 голосов
/ 03 марта 2012

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

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

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

0 голосов
/ 03 марта 2012

Я не вижу необходимости превращать отдельные элементы в строки 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());  
}
0 голосов
/ 03 марта 2012

Почему бы не просто использовать $ ('# target'). Append ($ (this));?

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

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

0 голосов
/ 03 марта 2012
content += $(this).parent().html();

И дайте элемент «this» фиктивную оболочку.

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

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