如何使用 jquery 处理 $.get 并捕获 html 元素?

发布于 2025-01-08 01:24:50 字数 287 浏览 0 评论 0原文

我正在使用 jQuery 阅读 html 文档。以下是我的代码。我需要找到 lang 属性,它是 HTML 元素的属性。但我很难按照我现在的方式选择它。当我处理 HTML 标记时,它要么没有值,要么为空,要么为未定义。

你能帮我解决这个问题吗?

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

I'm reading a html document using jQuery. Following is my code. I need to find lang attribute which is an attribute of HTML element. But I have trouble selecting it the way I'm doing. when I process HTML tag its either no value, null or undefined.

Can u please help me figure this out?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

以歌曲疗慰 2025-01-15 01:24:50

当您对响应文本执行 $(response) 时,大多数(如果不是全部)浏览器都会删除 html 元素。看看它,我看到两个选项:

  1. 将文本作为文本处理。不太理想,但解析 标记上的属性并不复杂。例如,这应该提取 lang 属性,排除异常:

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

    实例 | 实时源

    通常警告:HTML 不是常规语言,因此您无法可靠地解析它用正则表达式。有时,经过精心调整的正则表达式可以从 HTML 文本中提取一些信息,并且当使用预期的输入数据对其进行严格测试时,这些信息可能“足够好”,但请注意,它们无法针对所有可能的 HTML 源文本可靠地工作。

  2. 不要使用 $.get,而是创建一个隐藏的 iframe 并将 page 分配给它作为其 src。然后使用 iframe.contentDocument.documentElement 访问 html 元素,并使用 getAttribute 读取其 lang 属性。

    这可能看起来像这样:

    实时复制 | 实时源 | 正在加载的页面来源

    display("正在加载 iframe...");
    var $iframe = $("

    (我必须采取一些防御措施,因为 JSBin 将我们的页面包装在它自己的框架中。)

When you do $(response) on the response text, the html element gets dropped by most (if not all) browsers. To look at it, I see two options:

  1. Process the text as text. Not ideal, but it's not that complicated to parse the attributes on the <html> tag. For instance, this should extract the lang attribute barring the unusual:

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

    Live example | Live source

    Usual caveat: HTML is not a regular language, so you can't reliably parse it with regular expresions. Sometimes a well-tuned regex can extract bits of information from HTML text, and those can be "good enough" when they're rigorously tested with the expected input data, but just beware that they cannot work reliably against all possible HTML source texts.

  2. Rather than using $.get, create a hidden iframe and assign page to it as its src. Then use iframe.contentDocument.documentElement to access the html element, and use getAttribute to read its lang attribute.

    That might look something like this:

    Live copy | Live source | Source of page being loaded

    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";
    

    (I've had to be somewhat defensive there because JSBin wraps our page in a frame of its own.)

弃爱 2025-01-15 01:24:50

你可以使用 javascript 来做这样的事情:

<script type="text/javascript"> 
     var language = document.getElementsByTagName("html")[0].getAttribute("lang");
     alert(language);
</script>

You can use javascript to do something like this:

<script type="text/javascript"> 
     var language = document.getElementsByTagName("html")[0].getAttribute("lang");
     alert(language);
</script>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文