Разобрать и обработать DOM, который поступил как строковый ввод - PullRequest
1 голос
/ 24 декабря 2011

Вот в чем дело,

У меня есть текстовая область (с идентификатором "input_container"), полная HTML-кода, простой пример:

<!doctype html>
<html>
    <head></head>
    <body>
        <a href="www.example.com">the other place</a>
    </body>
</html>

Как я могу ее проанализировать ииспользовать его в JQuery в качестве законного DOM?Например, чтобы сделать

$(varWithDom).find(...)

с этим DOM?

Что я уже пробовал

Я попытался разобрать его с помощью jQuery, но забавночто-то случилось - jQuery удалил DOCTYPE и всю HEAD и не оставил мне ничего, кроме

        <a href="www.example.com">the other place</a>

Мой оригинальный метод здесь: Анализатор HTML jQuery удаляет некоторые теги без предупреждения, почему икак это предотвратить?

Я так и не нашел решения.Есть идеи?это может быть ошибка в jQuery или что?

1 Ответ

1 голос
/ 24 декабря 2011

Если вам нужен весь контент как элементы, вы можете попробовать использовать iframe.

 // create and append new iframe
var iframe = document.createElement('iframe');
document.documentElement.appendChild(iframe);

  // set its innerHTML
iframe.contentWindow.document.documentElement.innerHTML = varWithDOM;

  // grab the `window`
var win = iframe.contentWindow;

  // remove the iframe
document.documentElement.removeChild(iframe);

Демонстрация, которая захватывает head: http://jsfiddle.net/K6tR2/


оригинальный ответ

Не столько jQuery удаляет его, сколько браузер. Это поведение будет отличаться в разных браузерах.

Одна вещь, которую вы могли бы попробовать, это поместить все это в <div>, чтобы это стало вашим контекстом ...

$('<div>' + varWithDom + '</div>').find(...)

Теперь не имеет значения, что удалено (если вам действительно не нужно что-то в <head>), поскольку все это будет потомком внешнего div.

Если вы этого не хотите, то вам нужно будет выполнить запрос дважды, один раз с .find() и один раз с .filter() ...

var els = $( varWithDom );
var links = els.find( 'a[href]' ).add( els.filter( 'a[href]' ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...