मुझे जावास्क्रिप्ट के साथ मेटा टैग से जानकारी कैसे मिलेगी?


136

मुझे जो जानकारी चाहिए वह मेटा टैग में है। मैं "content"मेटा टैग के डेटा को कब तक एक्सेस कर सकता हूं property="video"?

HTML:

<meta property="video" content="http://video.com/video33353.mp4" />

2
ध्यान दें कि <meta>एक nameविशेषता होनी चाहिए , नहीं property। मानक विशेषता का उपयोग करने वाले डेवलपर्स को अधिकांश उत्तरों द्वारा दिए गए कोड को अनुकूलित करने की आवश्यकता होगी।
जेन्स बैनमैन

जवाबों:


128

आप इसका उपयोग कर सकते हैं:

function getMeta(metaName) {
  const metas = document.getElementsByTagName('meta');

  for (let i = 0; i < metas.length; i++) {
    if (metas[i].getAttribute('name') === metaName) {
      return metas[i].getAttribute('content');
    }
  }

  return '';
}

console.log(getMeta('video'));

6
क्या आप वास्तव में चाहते हैं 'चलो' रखने के लिए उन्हें स्थानीय स्तर पर परिभाषित किया गया है;)
tommed

22
यदि आप querySelector का उपयोग कर सकते हैं, तो आप कुछ इस तरह कर सकते हैं: document.querySelector("meta[property='og:url']").getAttribute('content')
Nishchal Gautam

3
मुझे लगता है कि यह उत्तर अधिक प्रासंगिक नहीं है और आपको वास्तव में stackoverflow.com/questions/7524585/… का
सर्गेई बशारोव

इस उत्तर को छोड़ दें। यह ओपी के [शाब्दिक रूप से विषम] मामले में काम नहीं करता है क्योंकि यह "संपत्ति" विशेषता के बजाय "नाम" को देखता है। और इसकी वर्तमान स्थिति में यह अत्यधिक जटिल है, लेकिन बिना किसी पश्चगामी संगतता लाभ के - कोई भी ब्राउज़र जो समर्थन const/ letसमर्थन करना चाहिए .querySelector!
natevw

सिर्फ एक मेटा विशेषता के लिए, कई बार लूप पर क्यों? इसमें सैकड़ों मेटा टैग हो सकते हैं या इसे कई बार मेटा वैल्यू प्राप्त करने की आवश्यकता हो सकती है।
SKR

212

अन्य उत्तरों को शायद चाल चलनी चाहिए, लेकिन यह सरल है और इसे jQuery की आवश्यकता नहीं है:

document.head.querySelector("[property~=video][content]").content;

मूल प्रश्न एक विशेषता के साथ RDFa टैग का उपयोग करता है property=""। सामान्य HTML <meta name="" …>टैग के लिए आप कुछ का उपयोग कर सकते हैं:

document.querySelector('meta[name="description"]').content

16
सरल, सुरुचिपूर्ण और कोई निर्भरता नहीं है। स्वीकार किए गए उत्तर imo से बेहतर
Raniz

6
भले ही मेरा मेटा <head> टैग में है, document.head.querySelectorमुझे दिया nullलेकिन document.querySelectorपूरी तरह से काम किया
रॉबिन वैन बालन

10
ओजी टैग के साथ काम करने के लिए इसे इस तरह से कोट जोड़ें_: var शीर्षक = document.head.querySelector ('[property = "og: title"]');
अरोप

1
अच्छा। भाग [[सामग्री] "किस उद्देश्य से काम करता है? इसके बिना, मुझे मेटा तत्व भी मिलता है।
शहरकीड

1
@citykid यह कुछ हद तक शानदार लगता है। स्निपेट हमेशा एक टाइपरोर फेंक देगा यदि टैग उसकी "संपत्ति" से नहीं मिला है। [content]चयनकर्ता में शामिल करना उस मामले को छोड़ देता है जहां किसी भी मिलान टैग में सामग्री विशेषता का अभाव होता है। IMO यह एक अशक्त परिणाम प्राप्त करने के लिए उस मामले में अधिक समझ में आता है, लेकिन यह कार्यान्वयनकर्ता की प्राथमिकता पर निर्भर करता है।
natevw

93

यहाँ जवाब पढ़ने के लिए बहुत मुश्किल है। यहां एक लाइनर

document.querySelector("meta[property='og:image']").getAttribute("content");

23

एक आसान तरीका है:

document.getElementsByName('name of metatag')[0].getAttribute('content')

यह कम से कम IE11 पर वापस काम करता है, जो इसे अधिक उपयोगी बनाता है।
rprez

1
document.querySelectorसंस्करण IE8 करने के लिए सभी तरह से काम करता है, तो यह की बहुत
fregante

यह सामान्य रूप से एक बहुत अच्छा तरीका है, लेकिन ध्यान दें कि ओपी RDFa "संपत्ति" विशेषता का उपयोग अधिक बुनियादी "नाम" विशेषता के बजाय कर रहा है ( stackoverflow.com/questions/22350105/… )
natevw

16
function getMetaContentByName(name,content){
   var content = (content==null)?'content':content;
   return document.querySelector("meta[name='"+name+"']").getAttribute(content);
}

इस तरह से उपयोग किया जाता है:

getMetaContentByName("video");

इस पृष्ठ पर उदाहरण:

getMetaContentByName("twitter:domain");

मैंने इस tidbit का उपयोग किया था, लेकिन एक निश्चित पृष्ठ पर एक type errorरूप undefinedहो रहा था क्योंकि मेटा टैग स्वयं गायब था। मैंने हल किया कि एक चर को असाइन करके और document.queryselectorएक कोशिश बयान में लपेटकर ताकि मैं ""त्रुटि के मामले में डिफ़ॉल्ट रूप से प्राप्त कर सकूं।
bgmCoder

फ़ंक्शन getMetaContentByName (नाम, सामग्री) {var सामग्री = (सामग्री == null); 'सामग्री': सामग्री; {{document.querySelector ("मेटा [नाम = '" + नाम + ""]) की कोशिश करें। getAttribute (सामग्री); } पकड़ {वापसी नल; }}
devMariusz

15

यदि आप JQuery का उपयोग करते हैं, तो आप उपयोग कर सकते हैं:

$("meta[property='video']").attr('content');

9
मान लेना jquery, या कुछ पुस्तकालय; जावास्क्रिप्ट नहीं
ILMostro_7

12

Jquery में आप इसे प्राप्त कर सकते हैं:

$("meta[property='video']");

जावास्क्रिप्ट में आप इसे प्राप्त कर सकते हैं:

document.getElementsByTagName('meta').item(property='video');

10
यह काम करने के लिए लगता है (क्रोम में कम से कम): document.getElementsByTagName('meta')['video'].getAttribute('content');यदि मार्कअप नीचे है:<meta name="video" content="http://video.com/video33353.mp4" />
samdeV

1
@samdeV, यह यहां के सभी समाधानों में सबसे साफ है। इसे अपने उत्तर के रूप में जमा करें। :)
frandroid

1
@samdeV, भी आपको .getAttribute ('सामग्री') की आवश्यकता नहीं है, आप बस .content: document.getElementsByTagName ('मेटा') ['वीडियो'] सामग्री को देख सकते हैं। मैंने अभी-अभी परीक्षण किया है, यह फ़ायरफ़ॉक्स में भी ठीक काम करता है।
फ्रेन्ड्रॉयड

मुझे अब सूचित किया गया है कि यह सफारी में काम नहीं करता है। लानत है।
फ्राँड्रोइड

4

रास्ता - []

function getMetaContent(property, name){
    return document.head.querySelector("["+property+"="+name+"]").content;
}
console.log(getMetaContent('name', 'csrf-token'));

आपको त्रुटि मिल सकती है: अनकैप्ड टाइपर्रर: प्रॉपर्टी को रीड नहीं कर सकता है


रास्ता - []

function getMetaContent(name){
    return document.getElementsByTagName('meta')[name].getAttribute("content");
}
console.log(getMetaContent('csrf-token'));

आपको त्रुटि मिल सकती है: अनकैप्ड टाइपर्रर: प्रॉपर्टी को रीड नहीं कर सकता है


रास्ता - []

function getMetaContent(name){
    name = document.getElementsByTagName('meta')[name];
    if(name != undefined){
        name = name.getAttribute("content");
        if(name != undefined){
            return name;
        }
    }
    return null;
}
console.log(getMetaContent('csrf-token'));

त्रुटि मिलने के बजाय, आपको मिलता है null, यह अच्छा है।



2

यह कोड मेरे लिए काम करता है

<meta name="text" property="text" content="This is text" />
<meta name="video" property="text" content="http://video.com/video33353.mp4" />

जे एस

var x = document.getElementsByTagName("META");
    var txt = "";
    var i;
    for (i = 0; i < x.length; i++) {
        if (x[i].name=="video")
        {
             alert(x[i].content);
         }

    }    

उदाहरण फिडल: http://jsfiddle.net/muthupandiant/ogfLwdwt/


2
function getDescription() {
    var info = document.getElementsByTagName('meta');
    return [].filter.call(info, function (val) {
        if(val.name === 'description') return val;
    })[0].content;
}

नया संस्करण:

function getDesc() {
    var desc = document.head.querySelector('meta[name=description]');
    return desc ? desc.content : undefined;
}

1

यहाँ एक फ़ंक्शन है जो किसी भी मेटा टैग की सामग्री को लौटाएगा और DOM की अनावश्यक क्वेरी से बचते हुए, परिणाम को याद करेगा।

var getMetaContent = (function(){
        var metas = {};
        var metaGetter = function(metaName){
            var theMetaContent, wasDOMQueried = true;;
            if (metas[metaName]) {
                theMetaContent = metas[metaName];
                wasDOMQueried = false;
            }
            else {
                 Array.prototype.forEach.call(document.getElementsByTagName("meta"), function(el) {
                    if (el.name === metaName) theMetaContent = el.content;
                    metas[metaName] = theMetaContent;
                });
            }
            console.log("Q:wasDOMQueried? A:" + wasDOMQueried);
            return theMetaContent;
        }
        return metaGetter;
    })();

getMetaContent("description"); /* getMetaContent console.logs the content of the description metatag. If invoked a second time it confirms that the DOM  was only queried once */

और यहाँ एक विस्तारित संस्करण है जो खुले ग्राफ़ टैग के लिए भी पूछताछ करता है, और Array # some का उपयोग करता है :

var getMetaContent = (function(){
        var metas = {};
        var metaGetter = function(metaName){
            wasDOMQueried = true;
            if (metas[metaName]) {
                wasDOMQueried = false;
            }
            else {
                 Array.prototype.some.call(document.getElementsByTagName("meta"), function(el) {
                        if(el.name === metaName){
                           metas[metaName] = el.content;
                           return true;
                        }
                        if(el.getAttribute("property") === metaName){
                           metas[metaName] = el.content;
                           return true;
                        }
                        else{
                          metas[metaName] = "meta tag not found";
                        }  
                    });
            }
            console.info("Q:wasDOMQueried? A:" + wasDOMQueried);
            console.info(metas);
            return metas[metaName];
        }
        return metaGetter;
    })();

getMetaContent("video"); // "http://video.com/video33353.mp4"

1

समारोह का मेरा प्रकार:

const getMetaValue = (name) => {
  const element = document.querySelector(`meta[name="${name}"]`)
  return element?.getAttribute('content')
}

0

मैं व्यक्तिगत रूप से उन्हें केवल एक ऑब्जेक्ट हैश में लाना पसंद करता हूं, फिर मैं उन्हें कहीं भी एक्सेस कर सकता हूं। यह आसानी से एक इंजेक्शन चर के लिए सेट किया जा सकता है और फिर सब कुछ हो सकता है और यह केवल एक बार पकड़ा।

फ़ंक्शन को लपेटकर यह एक लाइनर के रूप में भी किया जा सकता है।

var meta = (function () {
    var m = document.querySelectorAll("meta"), r = {};
    for (var i = 0; i < m.length; i += 1) {
        r[m[i].getAttribute("name")] = m[i].getAttribute("content")
    }
    return r;
})();


0
<html>
<head>
<meta property="video" content="http://video.com/video33353.mp4" />
<meta name="video" content="http://video.com/video33353.mp4" />
</head>
<body>

<script>
var meta = document.getElementsByTagName("meta");
    size = meta.length;

for(var i=0; i<size; i++) {
    if (meta[i].getAttribute("property") === "video") {
        alert(meta[i].getAttribute("content"));
    }
}
meta = document.getElementsByTagName("meta")["video"].getAttribute("content");
alert(meta);
</script>
</body>
</html>

डेमो


0

यदि आप सभी मेटा टैग पाने के लिए अधिक दूरगामी समाधान में इंटरसेस्ट हैं तो आप इस कोड का उपयोग कर सकते हैं

function getAllMetas() {
    var metas = document.getElementsByTagName('meta');
    var summary = [];
    Array.from(metas)
        .forEach((meta) => {
            var tempsum = {};
            var attributes = meta.getAttributeNames();
            attributes.forEach(function(attribute) {
                tempsum[attribute] = meta.getAttribute(attribute);
            });
            summary.push(tempsum);
        });
    return summary;
}

// usage
console.log(getAllMetas());

-2

यदि मेटा टैग है:

<meta name="url" content="www.google.com" />

JQuery होगा:

const url = $('meta[name="url"]').attr('content'); // url = 'www.google.com'

जावास्क्रिप्ट होगा: (यह संपूर्ण HTML लौटाएगा)

const metaHtml = document.getElementsByTagName('meta').url // metaHtml = '<meta name="url" content="www.google.com" />'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.