2015-11-12 2 views
0

У меня есть страница с текстовым полем с атрибутом value как "Original Value". Предположим, я загрузил его и набрал «Новое значение» в текстовом поле. Оба примера ниже должны возвращать -1 (я попробовал его в консоли Firefox).Как получить исходный код страницы, а не текущий контент?

// 1. 
var wholecontento = ""; 
var wholecontento = document.documentElement.outerHTML; 
alert(wholecontento.search("New Value")); 

// 2. 
var wholecontento = ""; 
var wholecontento = document.body.outerHTML; 
alert(wholecontento.search("New Value")); 

Но оба они возвращают целое число, большее 1. Как я могу это исправить?

+0

Безопасно ли выполнить второй запрос на сервер? –

+0

Да. Это безопасно. Но я должен получить текущий контент для оценки. – Dhay

+1

Выполнение другого запроса - единственный способ получить источник, который не был проанализирован и не интерпретирован, возможно, динамически изменен, а затем повторно сериализован. Если вы согласны с повторным сериализацией, но не хотите взаимодействия с пользователем, используйте свой любимый метод сериализации DOM в _DOMContentLoaded_ time и сохраните его где-то для вашего будущего поиска. –

ответ

1

Это правильное поведение. Вы получаете строку HTML, используя DOM (Document Object Model), которая отражает текущую HTML-страницу, которую вы видите в браузере (включая все измененные).

Если вам нужно сохранить старое значение текстового поля, вам нужно :

  1. либо, сохранить первоначальное значение текстового поля после страницы загружаются для сравнения позже
  2. Или, только если вам нужен исходный код реального HTML, вы можете сделать что-либо:
    1. Убедитесь, что ваш код является первым битом кода, выполняемым браузером, может оказаться сложным получить кросс-браузерное решение (посмотрите на это question), затем в вашем коде храните копию document.body.outerHTML для более поздних версий использовать.
    2. Или, инициируйте запрос обратно к текущему URL-адресу и сохраните тело возврата в качестве исходного кода HTML, таким образом, вы уверены, что у вас есть копия исходного исходного кода HTML, но вам стоит 1 дополнительный запрос.

//jQuery code 
 
$.get(window.location.href, function (resp) { 
 
    // store the resp.data on some object 
 
    var sourceHTML = resp.data; 
 
}) 
 
.fail(function (resp) { 
 
    // error handling 
 
});

Добавлен комментарий Поля S ниже

document.body.outerHTML будет содержать только раздел <body>. Это (new XMLSerializer).serializeToString(document) предоставит вам все <html>, включая <!DOCTYPE html>

+2

Вы также можете запустить '(новый XMLSerializer) .serializeToString (документ) 'вместо использования _outerHTML_. Это будет включать в себя такие вещи, как '' –