2012-03-05 2 views
0

Я читаю строку таблицы с одной страницы, а затем пытаюсь поместить содержимое ячейки в различные элементы на второй странице. У меня есть такая работа, но я бы хотел (а) сделать это правильно и (б) избавиться от лишних тегов, которые я взял. Так что мой метод ....jQuery .load() - получение содержимого td из DOM

$(document).ready(function() { 
    $(function(){ 
    $('#result_row').load('schedule.html #schedule_list tr:eq(1)',function(){ 
     var date = $('td:eq(0)',this); 
     $('#date').html(date); 
     var title = $('td:eq(0)',this); 
     $('#title').html(title); 
     var speaker = $('td:eq(0)',this); 
     $('#speaker').html(speaker); 
    });    
    }); 
}); 

, а затем у меня есть <div class= "upcoming"> Next Talk: <span id="speaker"></span> - <span id="title"></span> (<span id="date"></span>) </div> <span id="result_row"></span>

Так это работает в точку, но у меня есть четкое ощущение, что я делаю это нерационально (или неправильно), как я «Новичок в jQuery. В частности, наличие пустого <span id="result_row"> кажется неправильным. Что еще более важно, он также импортирует теги <td> в элементы <span>, чего я бы хотел избежать. Все попытки innerHTML не удалось (например, var date = $('td:eq(0)',this).innerHTML;

Спасибо за любую помощь,

Ник

EDIT: Так что теперь я могу либо сделать это три раза

var date = $('td:eq(0)',this).text(); 
$('#date').text(date); 

, чтобы избежать попадания <td>. Или я могу это сделать

var data = $.find('td',this); 
$('#date').html(data[0]); 
$('#speaker').html(data[1]); 
$('#title').html(data[2]); 

, который, как мне кажется, выглядит намного яснее (и я предполагаю, что последние три строки могут быть выполнены в одном). Печально .text(), похоже, не работает, поэтому я застрял в <td>.

+0

Что это за 3 раза? '$ ('td: eq (0)', this);' – Eli

ответ

1

Если вы просто хотите получить данные внутри td s, используйте .html() или .text(). например:

var date = $('td:eq(0)',this).html(); 

С точки зрения это делать правильно, загрузка HTML со страницы (соскоб) редко делает это правильно. Вы должны получать данные из другого источника, такие как json, предоставленные &, отформатированные сервером и т. Д. Но если вы должны это сделать, ваш код выглядит хорошо для меня :)

+0

Спасибо Кристиану за быстрый ответ. Я попробовал .html(), но не смог заставить его работать. Однако .text() отлично работает. Я предположил, что это не самый рекомендуемый/мудрый способ, но это просто простой, быстрый сайт для друга. Они обновляют таблицу лекций (и это общая их знания HTML). Сервер университета допускает только HTML. Поэтому я решил, что самый простой способ показать «следующую» лекцию на домашней странице - это просто взять ее из таблицы ... –

0

Что касается эффективности, сделайте это:

$(document).ready(function() { 
    var resultRow = $('#resultRow'); 

    $.ajax({ 
     url: 'schedule.html' 
    }) 
    .done(function(response) { 
     var context = $('#schedule_list tr:eq(1)'), 
      data = context.find('td:eq(0)'); 

     $('#date, #title, #speaker').html(data).appendTo(resultRow); 
    }); 
}); 

Я заметил, что у вас было 2 document.ready. Удалена одна из них.

+0

Привет, Спасибо за быстрый ответ Эли. Я пробовал этот метод, но он, похоже, не работает. Из того, что я могу сказать (из позиции моего новичка), контекст переменной пуст. Кроме того, последняя строка ничего не отображает, даже когда я явно устанавливаю значения данных с помощью нового тестового массива. Если я использую ключ для данных, я затем вижу соответствующие значения тестового массива в трех элементах. Мне очень нравится концепция этого кода, особенно использование массива, который я должен был заметить сам, я просто не могу заставить его работать. –