#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
тегов. Таким образом, вы будете использовать стандартизированные имена атрибутов.