Я думаю, вы должны использовать цикл do-while:
if(c.moveToFirst()) {
do {
titles.add(c.getString(name));
titles.add(c.getString(age));
} while (c.moveToNext())
}
Как правило, теги сценария не выполняются при использовании innerHTML. В вашем случае это хорошо, потому что вызов document.write
уничтожит все, что уже есть на странице. Однако это оставляет вас без того HTML, который должен был добавить document.write.
Методы манипулирования HTML jQuery будут выполнять сценарии в HTML за вас, трюк состоит в том, чтобы захватить вызовы к document.write
и получить HTML в нужном месте. Если это достаточно просто, то подойдет что-то вроде этого:
var content = '';
document.write = function(s) {
content += s;
};
// execute the script
$('#foo').html(markupWithScriptInIt);
$('#foo .whereverTheDocumentWriteContentGoes').html(content);
Однако это становится сложным. Если сценарий находится в другом домене, он будет загружен асинхронно, поэтому вам придется подождать, пока он не будет готов, чтобы получить контент. Также, что, если он просто запишет HTML в середину фрагмента без элемента оболочки, который вы можете легко выбрать? writeCapture.js (полное раскрытие: я написал его) решает все эти проблемы. Я бы рекомендовал просто использовать его, но, по крайней мере, вы можете посмотреть на код, чтобы увидеть, как он все обрабатывает.
РЕДАКТИРОВАТЬ: Вот страница , демонстрирующая, как звучит желаемый эффект.
Я могу заставить некоторое разъяснение сначала удостоверяться, что я получаю проблему?
document.write
вызовы добавят содержание к разметке в точке в разметке, в которой они происходят. Например, если Вы будете включать document.write
вызовы в функцию, но будете вызывать функцию в другом месте, эти document.write
, то вывод произойдет в точке в разметке, которая функция , определил не, где это названо .
Поэтому, чтобы это работало во всех операторах Flickr document.write
, должна будет быть часть content
в element.innerHTML = content
. Этот определенно имеет место?
Вы могли бы быстро протестировать, если это должно работать вообще путем добавления сингла и простой document.write
вызов в содержании, которое установлено как innerHTML
, и посмотрите то, что это делает:
<script>
var content = "<p>1st para</p><script>document.write('<p>2nd para</p>');</script>"
element.innerHTML = content;
</script>
, Если это работает, понятие document.write
, работа в наборе содержания как innerHTML
из элемента могла бы просто работать.
Мое инстинктивное чувство состоит в том, что это не будет работать, но это должно быть довольно просто для тестирования понятия.
Таким образом, Вы используете метод DOM, чтобы создать script
элемент и добавить это к существующему элементу, и это затем заставляет содержание добавленного script
элемент выполняться? Это звучит хорошим.
Вы говорите, что тег script является частью большей страницы HTML и поэтому не может быть выбран. Разве Вы не можете дать тегу script идентификатор и нацелены на него? Я, вероятно, пропускаю что-то очевидное здесь.
document.write
является почти столь устаревшим, как они прибывают. Благодаря чудесам JavaScript, тем не менее, можно просто присвоить собственную функцию write
метод эти document
объект, который использует innerHTML
на элементе желания добавить предоставленное содержание.
Я создал простую тестовую страницу, которая иллюстрирует проблему:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Document Write Testcase</title>
</head>
<body>
<div id="container">
</div>
<div id="container2">
</div>
<script>
// This doesn't work!
var container = document.getElementById('container');
container.innerHTML = "<script type='text/javascript'>alert('foo');document.write('bar');<\/script>";
// This does!
var container2 = document.getElementById('container2');
var script = document.createElement("script");
script.type = 'text/javascript';
script.innerHTML = "alert('bar');document.write('foo');";
container.appendChild(script);
</script>
</body>
</html>
Эта страница предупреждает 'панель' и печатает 'нечто', в то время как я ожидал, что это также предупредит 'нечто' и распечатает 'панель'. Но к сожалению, начиная с эти script
тег является частью большей страницы HTML, я не могу выбрать тот тег и добавить его как пример выше. Ну, я могу, но это потребовало бы сканирования innerHTML
содержание для script
теги и замена их в строке заполнителями и затем вставки их использующий DOM. Звуки не это тривиальный.
В теории, да, я могу выбрать тег script тот путь. Проблема состоит в том, что у нас потенциально есть десятки ситуаций, где это происходит, таким образом, я пытаюсь найти некоторую причину или документацию этого поведения.
кроме того, эти script
тег, кажется, не часть DOM больше после того, как это будет загружено. В нашей среде мой container
отделение остается пустым, таким образом, я не могу выбрать эти script
тег. Это должно работать, тем не менее, потому что в моем примере выше сценария не становится выполняемым, но все еще часть DOM.