【问题标题】:getelementsbyname (in an Ajax html response) when I have a partial name.getelementsbyname(在 Ajax html 响应中)当我有部分名称时。
【发布时间】:2011-09-21 22:47:46
【问题描述】:

我被困在 jQuery 世界的角落里,肯定需要一些帮助。

简而言之,我使用 jQuery (GET) 进行 Ajax 调用并获得一个 XHTML 页面作为响应。在响应中(包括<html><head><body> 标签等)有一个输入元素,我只知道它的部分名称。我需要获取响应随附的隐藏输入字段的值。

附言我无法控制 html 响应的外观,所以我无法重新格式化它。 这些文件需要位于包含 jQuery.js(今天的最新版本)的文件夹中

这是我迄今为止想出的。

Page1.html(进行 Ajax 调用并获取 page2.html 作为响应)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
        <title>runthis</title>

        <script type="text/javascript" language="javascript" src="jQuery.js"></script>

        <script tyle="text/javascript">
        $(document).ready(function(){
                $('input').click(function(){
                        $.ajax({
                                type : "GET",
                                url : 'page2.html',
                                dataType : "html",
                                success: function(data) {
                                    alert($(data).filter('input[name*="test"]').value);
                                },
                                error : function() {
                                        alert("Sorry, The requested property could not be found.");
                                }
                        });
                });
        });
        </script

</head>
<body>
        <input type="button" value="load" />
</body>
</html>

Page2.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
        <title>TiTlE</title>

</head>
<body>
        <input type="hidden" name="1-test" value="123" />
        <input type="hidden" name="some-other-name" value="456" />
        <input type="hidden" name="yet-another-name="789" />
</body>
</html>

所以在这些示例中,我需要得到“123”作为答案。

如果有人能指出我的错误并帮助我完成这项工作,我将不胜感激。我花了几个小时浏览网络,我的所有 Google 搜索结果都标记为已查看:) 但仍然无法正常工作。

【问题讨论】:

    标签: javascript jquery ajax html-parsing


    【解决方案1】:

    filter() 返回一个 jQuery 对象,而不是 DOM 元素,所以你必须使用 val() 方法而不是 value 属性:

    alert($(data).filter('input[name*="test"]').val());
    

    【讨论】:

    • 我刚刚意识到您的标记无效:&lt;input type="hidden" name="yet-another-name="789" /&gt; 是语法错误。这可能是问题的原因。
    • 哦,是的,这是我的错,但这不是问题!经过测试!
    • @Amir,奇怪,它在this fiddle 中对我来说很好用。
    【解决方案2】:

    我刚刚复制了您的设置,并发现了两个问题需要您解决才能使其正常工作。

    两者都在这一行:

    alert($(data).filter('input[name*="test"]').value);
    

    首先应该结束.val()

    其次,您要求的是子集的值。选择第一个匹配项并返回该匹配项的值:

    alert($(data).first('input[name*="test"]').val())
    

    【讨论】:

    • 为什么没有意义?此外,为什么在将标记添加到文档后执行完全相同的操作会有意义?
    • 你说得对,我在考虑多个匹配结果,但我的代码会出现同样的问题。正在编辑...
    • 再次测试,我的设置返回结果。他的设置返回“未定义”。接受有关原因的建议,但上述工作正常。
    • 感谢您的快速回答,您能给我一个“良好做法”的示例吗?问候,阿米尔
    • @Chris,那是因为提问者的 HTML 标记无效。
    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多