2010-05-14 104 views
12

可能重複:
Is it possible to use javascript to change the meta-tags of the page?使用jQuery來設置meta標籤有值的麻煩

我正在嘗試設置使用jQuery元標籤(請不要回復,這沒有按」沒有任何意義,因爲搜索引擎blah-blah-blah ...我正在加載調用第三方Javascript函數來檢查這些價值,如Tweetmeme和Facebook)。

如果我使用:

$('meta[name=some-name]').attr('content', 'some value'); 

它的工作設置一個現有的meta標籤的值,但是如果這樣的命名不存在不創建一個meta標籤。

如果你有洞察力或經驗,用這個,請回復......

+0

你用什麼jQuery代碼來創建標籤? – Luke 2010-05-14 02:36:21

回答

12

你可以做到這一點,不是最乾淨的,但你想要做的是非常奇怪所以沒有處理的好方法它:

var mt = $('meta[name=some-name]'); 
mt = mt.length ? mt : $('<meta name="some-name" />').appendTo('head'); 
mt.attr('content', 'some value'); 

在那裏檢查.length,即0或false如果沒有找到,如果這是我們創造的元素,並將其追加到頭部的情況下,是否增加或最初發現,mt條件表達式現在設置爲<meta>,並且您可以設置attrib UTE。

+0

感謝代碼尼克。我正在做的事可能看起來很奇怪,但它是一個100%的客戶端應用程序,所以用戶做的事情,Meta標籤的價值需要改變以反映當前的狀態。 – Zhami 2010-05-14 02:53:27

+0

嗨,不應該是:mt.attr('some-name','some value'); – 2011-12-13 14:55:46

+1

@Andresch - nope,我們正在設置''標籤的'content =「some value」'屬性,它是該元素的一個特定屬性...您可以在這裏閱讀更多關於它的信息:http:// www .w3.org/TR/html4/struct/global.html#h-7.4.4.2 – 2011-12-13 14:58:59

6

利用Nick的代碼,我做了一個功能來執行元標記設置,如有必要創建。如果這是用任何人的...

function setOrCreateMetaTag(metaName, name, value) { 
     var t = 'meta['+metaName+'='+name+']'; 
     var mt = $(t); 
     if (mt.length === 0) { 
      t = '<meta '+metaName+'="'+name+'" />'; 
      mt = $(t).appendTo('head'); 
     } 
     mt.attr('content', value); 
    } 

最多可以假設的metaName是「名」,但我也有設置「屬性」爲好,這樣做的功能處理的元元-名稱。

+0

我可以建議改變函數返回'mt'嗎?您可能也想對其執行其他操作。 – nickf 2010-05-14 03:11:16

+0

啊,鏈接,當然。感謝提醒我的模式! – Zhami 2010-05-14 11:05:07

6

我只是在iOS上試驗了一下。原來,這是可以動態地設置meta標籤,以防止縮放在iOS上,像這樣:

$('<meta>', { 
name: 'viewport', 
content: 'width=device-width, minimum-scale=1, maximum-scale=1' 
}).appendTo('head'); 

但是刪除它,也沒有重新啓用變焦:

$('meta[name=viewport]').remove(); 

但覆蓋meta標記:

$('meta[name=viewport]').attr(
'content', 
'width=980, minimum-scale=0.25, maximum-scale=1.6' 
); 

其默認值做。

+0

我相信最後一個代碼塊的第一行應該是: /* $('meta [name = viewport]')。attr(*/ 我加了'。 – KatieK 2011-12-13 01:44:04

+0

@KatieK修正,謝謝! – Matijs 2011-12-13 09:11:46