2013-02-27 3 views
0

У меня есть этот селектор попытку:JQuery - Selector на основе атрибутов

<textarea tinymce="basicoptions"></textarea> 
<textarea tinymce="advancedoptions"></textarea> 
<script language="javascript" type="text/javascript"> 
$(document).ready(function(){ 
    $('textarea[tinymce]').each(function(){ 
    var tinymceopts = $(this).attr('tinymce'); 
    $(this).tinymce(tinymceopts); 

}); 
</script> 

Просто, я использую свой собственный атрибут, называемый tinymce держать строку, которая является имя переменной хранить в javascript файл.
(например, внутри файла JavaScript: var basicoptions = { ....stuff.... } И внутри этой переменной имеет специальные параметры для редактора TinyMCE

Код выше не работает, но если я заменю $(this).tinymce(tinymceopts); с одной из актуальных переменных:.. $(this).tinymce(basicoptions); это работает хорошо.

Я на самом деле есть 4 переменные для работы, но у меня показывает только 2 выше.

есть ли лучший способ сделать это?

ответ

0

Ok после повторного прочтения вашего Qu estion, похоже, вам просто нужно получить доступ к переменной с именем, аналогичным атрибуту. Если предположить, что это глобальная переменная, сделать это следующим образом:

$(document).ready(function(){ 
    $('textarea[tinymce]').each(function(){ 
    var tinymceopts = $(this).attr('tinymce'); 
    $(this).tinymce(window[tinymceopts]); 
}); 

Вместо передачи строки «basicoptions» методу tinymce, вы теперь ссылки на переменную window.basicoptions которые должны быть связаны с вашей var basicoptions переменной, предполагая, что объем действительно был на глобальном уровне. Если это не так, просто замените window на соответствующее пространство имен.

0

Это не похоже на селектор атрибутов jQuery или даже на jQuery.

С моей точки зрения вы создали четыре переменные с разными наборами параметров для редактора - вместо этого почему бы не создать один объект с несколькими свойствами?

var config = { 
    basic: {...}, 
    advanced: {...} 
}; 

Таким образом, вы можете получить доступ к конфигурации корреспондентской делать что-то вроде:

$('textarea[tinymce]').each(function() { 
    var tinymceopts = $(this).attr('tinymce'); 
    $(this).tinymce(config[tinymceopts]); 
}); 

Надеется, что это помогает!

0

Можно ли разместить параметры в атрибуте набора данных (docs) прямо в разметке? Затем вы можете использовать метод jQuery data() (docs) для получения параметров напрямую, без необходимости использования вторичной переменной.

Вы можете поместить строку JSON в атрибут, и jQuery автоматически проанализирует ее в полезном объекте.

<textarea class="tinymce" data-tinymceoptions='{"option":"option_value"}'></textarea> 

$('textarea.tinymce').each(function(){ 
    var options = $(this).data('tinymceoptions'); 
    // pass the options on to the tiny MCE library 
}); 

Примерить jsFiddle: http://jsfiddle.net/gF5Uq/

Документация

Смежные вопросы