Как обработать $ .get и поймать элемент html, используя jquery? - PullRequest
1 голос
/ 22 февраля 2012

Я читаю HTML-документ с использованием jQuery. Ниже мой код. Мне нужно найти атрибут lang, который является атрибутом элемента HTML. Но у меня проблемы с выбором, как я делаю. когда я обрабатываю тег HTML, его значение либо отсутствует, null или undefined.

Можете ли вы помочь мне понять это?

$.get(page, function(response) {
    alert(response);
    alert($(response).filter('html').attr('lang'));
});​

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Когда вы делаете $(response) для текста ответа, элемент html удаляется большинством (если не всеми) браузерами. Чтобы посмотреть на это, я вижу два варианта:

  1. Обрабатывать текст как текст. Не идеально, но не так сложно разобрать атрибуты тега <html>. Например, это должно извлечь атрибут lang, исключая необычное:

    var regex = /<\s*html\s[^>]*lang\s*=\s*["']?([A-Za-z0-9\-]+)/i;
    var matches = regex.exec(str);
    console.log(matches[1]);
    

    Живой пример | Живой источник

    Обычная оговорка: HTML не является обычным языком , поэтому вы не можете надежно проанализировать его с помощью регулярных выражений. Иногда хорошо настроенное регулярное выражение может извлекать фрагменты информации из HTML-текста, и они могут быть «достаточно хорошими», когда они тщательно тестируются с ожидаемыми входными данными, но просто имейте в виду, что они не могут надежно работать со всеми возможными исходными текстами HTML.

  2. Вместо использования $.get создайте скрытый iframe и присвойте ему page в качестве src. Затем используйте iframe.contentDocument.documentElement для доступа к элементу html и getAttribute для чтения его атрибута lang.

    Это может выглядеть примерно так:

    Живая копия | Живой источник | Источник загружаемой страницы

    display("Loading the iframe...");
    var $iframe = $("<iframe>");
    $iframe
      .css({
        position: "absolute",
        left: "-10000px"
      })
      .bind("load", function() {
        var doc = $iframe[0].contentDocument,
            html = doc && doc.documentElement,
            lang = html && html.getAttribute("lang");
        if (lang) {
          display("<code>lang = " + lang + "</code>");
          $iframe.remove(); // Or not, as you prefer
        }
      })
      .appendTo(document.body);
    $iframe[0].src = "http://jsbin.com/imeqij";
    

    (Я должен был быть там немного оборонительным, потому что JSBin оборачивает нашу страницу в отдельный кадр).

0 голосов
/ 22 февраля 2012

Вы можете использовать JavaScript, чтобы сделать что-то вроде этого:

<script type="text/javascript"> 
     var language = document.getElementsByTagName("html")[0].getAttribute("lang");
     alert(language);
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...