Получить несколько значений мета-контента с помощью jQuery?

#javascript #jquery #meta-tags

#javascript #jquery #мета-теги

Вопрос:

Какой наиболее эффективный способ получить несколько значений мета-тегов с помощью jQuery? Я сохраняю некоторые значения в мета-тегах, которые я хочу прочитать с помощью jQuery и либо передать вызовам ajax, либо внести изменения в пользовательский интерфейс на основе. База кода, над которой я работаю в настоящее время, содержит это…

 params: {
    ad_hash:                $('meta[property=ad_hash]').attr('content'),
    ad_id:                  $('meta[property=ad_id]').attr('content'),
    ad_advertiser_id:       $('meta[property=ad_advertiser_id]').attr('content'),
    ad_subcategory_id:      $('meta[property=ad_subcategory_id]').attr('content'),
    ad_est_firstoccur:      $('meta[property=ad_est_firstoccur]').attr('content'),
    ad_est_lastoccur:       $('meta[property=ad_est_lastoccur]').attr('content'),
    ad_firstoccur:          $('meta[property=ad_firstoccur]').attr('content'),
    ad_lastoccur:           $('meta[property=ad_lastoccur]').attr('content'),
    ad_time:                $('meta[property=ad_time]').attr('content'),
    ad_timestamp:           $('meta[property=ad_timestamp]').attr('content'),
    ad_rating:              $('meta[property=ad_rating]').attr('content'),
    hostname:               $('meta[property=hostname]').attr('content'),
    user_clientip:          $('meta[property=user_clientip]').attr('content'),
    user_searchterm:        $('meta[property=user_searchterm]').attr('content'),
    user_voted:             $('meta[property=user_voted]').attr('content'),
    trans_recentlyaired:    $('meta[property=trans_recentlyaired]').attr('content'),
    trans_lastaired:        $('meta[property=trans_lastaired]').attr('content'),
    trans_on:               $('meta[property=trans_on]').attr('content'),
    trans_during:           $('meta[property=trans_during]').attr('content'),
    trans_tobeaired:        $('meta[property=trans_tobeaired]').attr('content')
},
  

Есть ли более эффективный способ получить несколько значений мета-тегов, чем многократное обращение к dom? Вот несколько альтернативных решений, которые я рассмотрел…

  • Я мог бы ограничить область видимости, добавив head: $(‘meta[property=ad_hash]’, ‘head’).attr(‘content’)
  • Я мог бы сохранить все значения в одной строке JSON, но я столкнулся с некоторыми проблемами при чтении ее из мета-тега.
  • Есть ли способ использовать $ (‘meta’) для хранения совпадений с переменной, а затем получить доступ к отдельным тегам внутри нее?

Ответ №1:

Использование строки JSON было бы более эффективным с точки зрения размера, но по сути вы просто анализируете XML-данные. Вы могли бы перебирать meta теги, чтобы уменьшить частоту выбора из DOM и сделать ваш код более динамичным:

 var params = {};
$('head meta[property][content]').each(function() {
    params[$(this).attr('property')] = $(this).attr('content');
});
  

Комментарии:

1. Не могли бы вы отредактировать свой вопрос, чтобы предоставить общий доступ к HTML, который вы пытаетесь проанализировать (фиктивные данные в порядке)? Таким образом, я могу протестировать его, чтобы увидеть, что не так.

2. Похоже, что это приводит к сбою в this.property… jsbin.com/siguhutole/1/edit?html , js, консоль

3. @AdamYoungers Похоже, что this.property не синхронизируется с атрибутом в meta тегах. Теперь используем attr , чтобы убедиться, что он получает атрибут.

4. @AdamYoungers Возможно, вы захотите использовать name вместо property для своих meta тегов. Таким образом, вы будете использовать стандартизированные имена атрибутов.