2010-06-17 29 views
0

我有一個jquery函數(這不是我寫的,但我仍然在學習)。在這一點上,我們正在幾個地方使用f.attr(「href」)替換網址。我不明白,這個href值會從何處被綁定。爲什麼值(f.attr(「href」))正在改變的地方。我的意思是說它在一個地方有一定的價值,如果我給它相同的價值,那麼在其他地方就會給我不同的價值。jquery atrr(「href」)是不一致的..在sharepoint

我在一篇文章認爲,.attr()方法獲取的屬性值僅在匹配set..What的第一個元素讀的是匹配的一套意味着

讓我修改我的問題像這樣:我可以在Jquery函數中追加查詢字符串嗎?我想從網頁中添加兩個querystring元素來獲取完整的url。如果我們可以......我們可以如何實現這一目標?


.replace( 「$ {} MY_EMAIL」,「電子郵件地址:[email protected]主題= Thanku &體= jQuery的工作0A%%0ahttp://www.my.site.com/ _layouts/products/New.aspx?url =「+ f.attr(」href「))在這個f.attr(」href「)給我不同的價值比其他地方我們用..基本上它給了我一半該鏈接僅..

是否有你需要我可以爲您提供感謝ü

回答

2

當您使用一個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是一個糟糕的變量名稱,btw,使其更加冗長,可能有助於理解代碼的作用)。在你的情況下,我懷疑f是一個變量,它匹配代碼中不同位置的不同選擇器。這可以解釋爲什麼它在不同位置的href屬性具有不同的值。當然,這些價值觀也可能因爲你在設置它們而發生變化,但我希望你能理解這種情況是否發生。

+0

我恐怕會繼續這個話題。 我可以盡我所能地解釋場景。我有一個網頁彈出,它帶有一些查詢字符串屬性。而且彈出窗口有一些按鈕,如打印和電子郵件。當我給f.attr(「href」)時,它將獲取所有查詢字符串參數。我在電子郵件正文中給出了相同的f.attr(「href」)。這次鏈接只接受一個查詢字符串參數。我在電子郵件正文中給出了什麼問題嗎?我在代碼中看不到多個href值。你有什麼想法嗎? 非常感謝您的回覆 – alienavatar 2010-06-18 17:54:48

+0

@alienavatar - 如果您需要任何特定的東西,您將需要展示一些代碼示例。 'f'大概是一個對應於選擇器的變量,但我們不知道是什麼或如何。如果適用,將相關(和完整)JavaScript片段添加到您的問題+ HTML中。請不要將其添加爲答案 - 只需編輯您的問題並將其附加到底部,並標記爲對問題的編輯。爲每個答案添加評論,以便在您更新問題時通知我們。 – tvanfosson 2010-06-18 18:12:48

+0

我編輯了我的問題。你可以看看它,並分享你的想法 – alienavatar 2010-06-20 18:39:08

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 > a')爲您的jQuery選擇,你會匹配(在這個例子中)所有錨標籤,其內容爲「錨」;因爲這個選擇器只匹配div的孩子的錨標籤。

你可以看到有多少元素您的匹配調用alert(f.length);

如果你能提供定義f代碼,或看到一些HTML的在你的頁面設置,我們就可以幫助您更特別!

如果你設置爲使用f.attr()的值,所有匹配的元素將更新。如果您使用f.attr()獲得,則只返回第一個元素的值。

+0

.replace(「$ {my_email}」,「mailto:[email protected]?subject = Thanku&body = jquery working。%0A%0ahttp://www.my.site.com/_layouts/products/New (「href」)) 在這個f.attr(「href」)給我不同的價值比其他地方,我們使用..基本上它只給了我一半的鏈接.. 有什麼需要我可以提供的嗎 謝謝你 – alienavatar 2010-06-17 21:34:37

2

一個匹配的集合是零和多個元素,它們是初始查詢的結果,例如$('.foo')將返回一個具有定義的類foo的所有元素的集合。當您在該集上調用.attr('href')時,它只會返回集合中第一個元素的屬性(如果有的話),因爲返回數組中的所有屬性或連接並不是大多數人通常想要的。

如果你真的希望所有的屬性,你可以做如下:

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