ข้อมูลที่ฉันต้องการอยู่ในเมตาแท็ก ฉันจะเข้าถึง"content"
ข้อมูลของเมตาแท็กได้property="video"
อย่างไร?
HTML:
<meta property="video" content="http://video.com/video33353.mp4" />
ข้อมูลที่ฉันต้องการอยู่ในเมตาแท็ก ฉันจะเข้าถึง"content"
ข้อมูลของเมตาแท็กได้property="video"
อย่างไร?
HTML:
<meta property="video" content="http://video.com/video33353.mp4" />
คำตอบ:
คุณสามารถใช้สิ่งนี้:
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'));
document.querySelector("meta[property='og:url']").getAttribute('content')
const
/ let
ควรรองรับ.querySelector
!
คำตอบอื่น ๆ น่าจะเป็นเคล็ดลับ แต่คำตอบนี้ง่ายกว่าและไม่ต้องใช้ jQuery:
document.head.querySelector("[property~=video][content]").content;
คำถามเดิมใช้แท็กRDFaพร้อมproperty=""
แอตทริบิวต์ สำหรับ<meta name="" …>
แท็กHTML ปกติคุณสามารถใช้สิ่งต่างๆเช่น:
document.querySelector('meta[name="description"]').content
document.head.querySelector
ให้ผมnull
แต่document.querySelector
ทำงานอย่างสมบูรณ์
[content]
ไว้ในตัวเลือกจะขยายข้อยกเว้นนั้นไปยังกรณีที่แท็กที่ตรงกันไม่มีแอตทริบิวต์เนื้อหา IMO มันสมเหตุสมผลกว่าในกรณีนั้นที่จะได้ผลลัพธ์ที่เป็นโมฆะ แต่ฉันเดาว่ามันขึ้นอยู่กับความชอบของผู้ใช้งาน
ซับเดียวนี่
document.querySelector("meta[property='og:image']").getAttribute("content");
มีวิธีที่ง่ายกว่า:
document.getElementsByName('name of metatag')[0].getAttribute('content')
document.querySelector
เวอร์ชันนี้ใช้งานได้กับ IE8 ดังนั้นจึงมีมากมาย
function getMetaContentByName(name,content){
var content = (content==null)?'content':content;
return document.querySelector("meta[name='"+name+"']").getAttribute(content);
}
ใช้ในลักษณะนี้:
getMetaContentByName("video");
ตัวอย่างในหน้านี้:
getMetaContentByName("twitter:domain");
type error
เป็นundefined
เพราะเมตาแท็กเองก็หายไป ฉันแก้ไขโดยการกำหนดตัวแปรและตัดdocument.queryselector
คำสั่ง in a try เพื่อให้ฉันได้รับ""
โดยค่าเริ่มต้นในกรณีที่มีข้อผิดพลาด
หากคุณใช้ JQuery คุณสามารถใช้:
$("meta[property='video']").attr('content');
ใน Jquery คุณสามารถทำได้ด้วย:
$("meta[property='video']");
ใน JavaScript คุณสามารถทำได้ด้วย:
document.getElementsByTagName('meta').item(property='video');
document.getElementsByTagName('meta')['video'].getAttribute('content');
ถ้ามาร์กอัปเป็นดังนี้:<meta name="video" content="http://video.com/video33353.mp4" />
ทาง - [ 1 ]
function getMetaContent(property, name){
return document.head.querySelector("["+property+"="+name+"]").content;
}
console.log(getMetaContent('name', 'csrf-token'));
คุณอาจได้รับข้อผิดพลาด: Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ 'getAttribute' ของ null
ทาง - [ 2 ]
function getMetaContent(name){
return document.getElementsByTagName('meta')[name].getAttribute("content");
}
console.log(getMetaContent('csrf-token'));
คุณอาจได้รับข้อผิดพลาด: Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ 'getAttribute' ของ null
ทาง - [ 3 ]
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
นั่นเป็นสิ่งที่ดี
ง่ายๆใช่มั้ย?
document.head.querySelector("meta[property=video]").content
รหัสนี้ใช้ได้กับฉัน
<meta name="text" property="text" content="This is text" />
<meta name="video" property="text" content="http://video.com/video33353.mp4" />
JS
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/
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;
}
ฟังก์ชันที่แตกต่างกันของฉัน:
const getMetaValue = (name) => {
const element = document.querySelector(`meta[name="${name}"]`)
return element?.getAttribute('content')
}
นี่คือฟังก์ชั่นที่จะส่งคืนเนื้อหาของเมตาแท็กใด ๆ และจะบันทึกผลลัพธ์โดยหลีกเลี่ยงการสืบค้น 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"
โดยส่วนตัวแล้วฉันชอบที่จะได้รับมันในแฮชวัตถุเดียวจากนั้นฉันสามารถเข้าถึงได้ทุกที่ สิ่งนี้สามารถตั้งค่าเป็นตัวแปรแบบฉีดได้อย่างง่ายดายจากนั้นทุกอย่างก็มีได้และคว้าเพียงครั้งเดียว
การห่อฟังก์ชั่นนี้สามารถทำได้เป็นซับเดียว
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;
})();
FYI ตามhttps://developer.mozilla.org/en-US/docs/Web/HTML/Element/metaแอตทริบิวต์ของโลกที่ถูกต้องซึ่งหมายความว่าแอตทริบิวต์สามารถใช้กับid
getElementById
<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>
หากคุณใช้วิธีการแก้ปัญหาที่ครอบคลุมมากขึ้นเพื่อรับเมตาแท็กทั้งหมดคุณสามารถใช้โค้ดชิ้นนี้ได้
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());
ถ้าเมตาแท็กคือ:
<meta name="url" content="www.google.com" />
JQuery จะเป็น:
const url = $('meta[name="url"]').attr('content'); // url = 'www.google.com'
JavaScript จะเป็น: (จะส่งคืน HTML ทั้งหมด)
const metaHtml = document.getElementsByTagName('meta').url // metaHtml = '<meta name="url" content="www.google.com" />'
<meta>
ควรจะมีคุณลักษณะไม่name
property
นักพัฒนาที่ใช้แอตทริบิวต์มาตรฐานจะต้องปรับรหัสที่ได้รับจากคำตอบส่วนใหญ่