【问题标题】:jquery atrr("href") is not consistent ..in sharepointjquery attr("href") 不一致 ..in sharepoint
【发布时间】:2013-05-22 12:25:50
【问题描述】:

我有一个 jquery 函数(这不是我写的,我还在学习)。我们在几个地方使用 f.attr("href") 替换 url。我不明白这个 href 值将从哪里绑定。以及为什么 value(f.attr("href")) 会因地而异。我的意思是说它在一个位置有一些价值,如果我给出相同的值,它在其他位置给我不同的价值。

我在文章中读到.attr() 方法只获取匹配集中第一个元素的属性值。匹配集是什么意思

2

让我这样修改我的问题:我可以在 Jquery 函数中附加查询字符串吗?我想从网页中再添加两个查询字符串元素以获取完整的 url。如果可以的话..我们怎样才能做到这一点?


.replace("${my_email}", "mailto:my@u.com?subject=Thanku &body=Jquery 工作。%0A%0ahttp://www.my.site.com/_layouts/products/New .aspx?url=" + f.attr("href")) 在此 f.attr("href") 给我的价值与我们使用的其他人不同..基本上它只给了我一半的链接。 .

有什么需要的我可以给你谢谢

【问题讨论】:

    标签: jquery sharepoint


    【解决方案1】:

    当您在 jQuery 调用中使用选择器时,它可能匹配多个元素。结果以 jQuery 对象的形式返回,该对象可能包含匹配对象的集合(数组)。某些方法,例如 attr 仅适用于集合中的第一个元素。

    例如,

    $('a')
    

    将匹配文档中的所有锚标记。

    现在它们中的每一个都(可能)有一个href 属性,但是如果你将attr 函数应用于该选择器的结果,它只会对集合中的第一个元素进行操作。如果我有以下 HTML。

     <a href='#0'>Zero</a>
     <a href='#1'>One</a>
    

    并使用

    var href = $('a').attr('href');
    

    然后href 变量将具有#0 作为它的值,尽管选择器匹配两个锚点。

    更令人困惑的是,通常分配值而不是读取值的方法版本将适用于集合中的所有元素。例如,

    $('a').attr('title','foo');
    

    foo 分配给集合中两个锚点的标题属性。了解各种方法操作方式的差异很重要。具体方法见jQuery API

    在您的情况下,我怀疑f 是一个与代码中不同位置的不同选择器匹配的变量(f 是一个糟糕的变量名称,顺便说一句,让它更冗长可能有助于理解代码的内容做)。这可以解释为什么它在不同位置具有不同的 href 属性值。当然,这些值也可能会因为您正在设置它们而发生变化,但如果发生这种情况,我希望您能理解。

    【讨论】:

    • 我不敢继续这个话题。我可以尽可能多地解释这个场景。我在网页中有一个弹出窗口,它带有一些查询字符串属性。那个弹出窗口有一些按钮,比如打印和电子邮件。当我给 f.attr("href") 时,它正在获取所有查询字符串参数。而且我在电子邮件正文中给出了相同的 f.attr("href") 。这次链接只使用一个查询字符串参数。我在电子邮件正文中给出的内容有什么问题吗?不过,我没有在我的代码中看到多个 href 值。你对此有什么想法吗。非常感谢您的回复
    • @alienavatar - 如果您想要任何特定的东西,您将需要展示每个代码示例。 f 大概是一个对应于选择器的变量,但我们不知道是什么或如何。将相关(和完整)的 javascript sn-p(s) 添加到您的问题 + HTML(如果合适)。请不要将其添加为答案 - 只需编辑您的问题并将其附加到底部,标记为对问题的编辑。为每个答案添加评论,以便在您更新问题时通知我们。
    • 我编辑了我的问题。你能看看它并分享你的想法吗
    • @alienavatar - 作为一个单独的问题可能会更好,但简短的回答是可以。您可以使用 serialize 方法将输入转换为查询字符串参数,然后使用字符串操作简单地附加它们。 var url = $('a').attr('href') + '?' + $('#item_one,#item_two').serialize();.
    【解决方案2】:

    如果页面上有多个锚标记,则有机会选择多个。

    <a href="#">Missed</a>
    <div>
        <a href="#">Anchor</a>
        <a href="#">Anchor</a>
        <a href="#">Anchor</a>
        <a href="#">Anchor</a>
        <span><a href="#">Missed</a></span>
    </div>
    

    如果您将$('div &gt; a') 作为您的 jQuery 选择器,您将匹配(在此示例中)所有内容为“Anchor”的锚标记;因为这个选择器只匹配作为 div 子元素的锚标签。

    你可以通过调用alert(f.length);来查看你的匹配集有多少个元素

    如果您可以提供定义f 的代码,或者查看您页面中的一些 HTML,我们将能够为您提供更具体的帮助!

    如果您使用 f.attr()设置一个值,所有匹配的元素都会更新。如果您使用 f.attr()获取一个值,则只会返回第一个元素的值。

    【讨论】:

    • .replace("${my_email}", "mailto:my@u.com?subject=Thanku &body=Jquery working.%0A%0ahttp://www.my.site.com/ _layouts/products/New.aspx?url=" + f.attr("href")) 在这个 f.attr("href") 给我的价值与我们使用的其他人不同..基本上它给了我一半仅链接..您需要什么我可以为您提供谢谢您
    【解决方案3】:

    匹配的集合是零个和更多元素,它们是初始查询的结果,例如$('.foo') 将返回一个集合,其中包含定义了类 foo 的所有元素。当您在该集合上调用 .attr('href') 时,它只会返回集合中第一个元素的属性(如果有的话),因为返回数组或连接中的所有属性并不是大多数人通常想要的。

    如果你真的想要所有属性,你可以这样做:

    var array_of_hrefs = $('.foo').each(function(){
      return $(this).attr('href')
    }).get();
    

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 2011-09-26
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2015-09-06
      相关资源
      最近更新 更多