Я не уверен, что назвать этот вопрос, поскольку он включает в себя множество вещей, но мы начнем с первого выпуска ...jQuery - как повторить функцию внутри себя, чтобы включить вложенные файлы
Я пытался написать простой в использовании jQuery для включения (аналогично php или ssi) на статические html-сайты. Всякий раз, когда он находит div.jqinclude
, он получает attr('title')
(это мой внешний файл html), затем использует load()
для включения внешнего файла html. Затем он изменяет класс дел до jqincluded
Так что мой основной index.html может содержать несколько строк, как так:
<div class="jqinclude" title="menu.html"></div>
Однако в menu.html там может быть другая включает в себя вложенное. Таким образом, он должен сделать первый уровень включений, а затем выполнить те же действия для вновь включенного контента. Пока это работает отлично, но это очень многословно и только идет на пару уровней.
Как бы я сделал следующую повторяющуюся функцию для непрерывного цикла, пока не осталось больше class="jqinclude"
элементов? Я пробовал arguments.callee
и некоторые другие запутанные дурацкие попытки безрезультатно.
Мне также интересно узнать, есть ли другой совершенно другой способ, которым я должен это делать.
$('div.jqinclude').each(function() { // begin repeat here
var file = $(this).attr('title');
$(this).load(file, function() {
$(this).removeClass('jqinclude').addClass('jqincluded');
$(this).find('div.jqinclude').each(function() { // end repeat here
var file = $(this).attr('title');
$(this).load(file, function() {
$(this).removeClass('jqinclude').addClass('jqincluded');
$(this).find('div.jqinclude').each(function() {
var file = $(this).attr('title');
$(this).load(file, function() {
$(this).removeClass('jqinclude').addClass('jqincluded');
});
});
});
});
});
});
Hey Nick - спасибо за ваше время. Я также пытаюсь понять, как ваша версия отличается от Cletus. Помимо его удаления класса перед .load() - кажется, что вы оба выполняете функцию обратного вызова в пределах нагрузки. – brandonjp
@brandonjp - Оба должны работать, его ответ был не на обратном вызове, когда я оставил комментарий, он с тех пор обновлен. Нынешняя разница заключается в том, что он не добавляет класс 'jqincluded', как ваш вопрос, этот ответ по-прежнему ... если вам это не нужно, просто удалите' .addClass ('jqincluded') ' –