2016-07-27 1 views
0

受信したeventbriteメールのコンテンツにアクセスしようとしていますが、HTMLコードにはJSON-LDスクリプトに関連付けられたIDがありません。それでは、このデータにまだアクセスする方法はありますか?もしそうなら、どうですか?JSON-LDにIDを持たないJavaScriptにアクセスする方法はありますか?

JSON-LDスクリプトタグに一時的なIDを付けてデータにアクセスすることは可能でしょうか?もしそうなら、どうですか?

+0

ようこそスタックオーバーフロー。 Minimal、Complete、Verifiableの質問の作成方法の詳細については、[こちらを読む](http://stackoverflow.com/help/mcve)を参照してください。 – Toby

+0

なぜアクセスするにはIDが必要ですか? – unor

+0

Unor、私がインターネットを検索したとき、すべての例でIDを使用していたので、IDを使用せずにアクセスする方法がわからなかった。 –

答えて

5

あなたはここに完全な例だ

document.querySelector('script[type="application/ld+json"]'); 

でちょうど

document.querySelectorAll('script[type="application/ld+json"]'); 

または最初のもので、すべてのJSON-LDブロックを取得することができます。

var jsonld = JSON.parse(document.querySelector('script[type="application/ld+json"]').innerText); 
 
document.getElementById('result').innerText = jsonld.endDate;
<html> 
 
    <head> 
 
    <script type="application/ld+json"> 
 
     { 
 
     "@context": "http://schema.org", 
 
     "@type": "Event", 
 
     "name": "A random event", 
 
     "startDate": "2013-09-14T21:30", 
 
     "endDate": "2013-09-14T21:30" 
 
     } 
 
    </script> 
 
    </head> 
 
    <body> 
 
    <p>The end date is: <strong id="result"></strong></p> 
 
    </body> 
 
</html>

+0

Markus、提案に感謝します!しかし、var emailDate = document.querySelectorAll( 'script [type = "application/ld + json"]')を使用すると構文エラーが発生します。 –

+0

また、json ld全体を選択したら、email.Dateだけを使用します。 endDateを使用してjson ldのデータにアクセスしますか? (私がアクセスしたいパラメータです) –

+0

完全な実行可能な例を含めるように答えを更新しました –

0
function myFunction() { 
    var todayDate = new Date(); 
    var label = GmailApp.getUserLabelByName("eventbrite"); 
    var threads = label.getThreads(); 


    for (var i = 0; i < threads.length; i++) { 
     threads[i].getMessages()[i].getBody().forEach(
      var jsonld = JSON.parse(document.querySelector('script[type="application/ld+json"]').innerText); 
      document.getElementById('result').innerText = jsonld.endDate; 

     if (jsonld.endDate > todayDate){ 
     threads[i].markUnread(); 
     } 
    ) 
    } 
} 
関連する問題