Как разобрать текст как JavaScript? - PullRequest
2 голосов
/ 18 июня 2010

Этот мой вопрос (в настоящее время без ответа) привел меня к поиску лучшего решения того, что я пытаюсь предпринять.

Мои требования:

& бык; Куски кода, которые могут быть произвольно добавлены в документ, без id:

<div class="thing">
  <elements... />
</div>

& бык; Объекты сканируются и обнаруживаются внешним скриптом:

var things = yd.getElementsBy(function(el){
    return yd.hasClass('thing');
},null,document );

& бык; Объекты должны быть индивидуально конфигурируемыми, что у меня в настоящее время основано на идентификаторе:

<div class="thing" id="thing0">
    <elements... />
    <script type="text/javascript">
      new Thing().init({ id:'thing0'; });
    </script>
</div>

& бык; Поэтому мне нужно отбросить идентификатор (id="thing0"), чтобы не было дубликатов, когда на страницу добавлено более одного блока одного и того же кода

& бык; Мне все еще нужно иметь возможность настраивать эти объекты индивидуально, без идентификатора


SO! Все это сказало, я задавался вопросом о создании динамической глобальной переменной в блоке сценария каждого добавленного фрагмента кода в его теге сценария. Когда каждая «вещь» найдена, я полагаю, что было бы законно захватить innerHTML тега script и каким-то образом преобразовать этот текст в пригодный для использования объект JS.

Обсуждайте.

Ладно, не обсуждайте, если хотите, но если вы почувствуете отклонение от нормы, не стесняйтесь исправить мои заблуждения или предложить лучшее решение - пожалуйста!

д

Ответы [ 2 ]

2 голосов
/ 18 июня 2010

Я вроде понимаю, откуда вы, и единственный совет, который я могу вам дать по этому поводу, - заглянуть в тег eval (). Функция eval () оценивает и / или выполняет строку кода JavaScript. Сначала eval () определяет, является ли аргумент допустимой строкой, затем eval () анализирует строку в поисках кода JavaScript. Если он найдет какой-либо код JavaScript, он будет выполнен.

Таким образом, вы можете анализировать текст внутри DIV или любого элемента, используя тег eval (). Извините, я не мог вам помочь.

0 голосов
/ 18 июня 2010

Почему бы не

<div class="thing virgin">
  <script>
    var newElems = yd.getElementsBy(function(el){
     return yd.hasClass(el,'thing') && yd.hasClass(el, 'virgin');
    },null,document );
    // find the 'virgin's and remove the 'virgin' class from them as you init?
  <script>
</div>

Конечно, вы можете полностью удалить тег <script>, если добавляете этот элемент через javascript, и просто выполнить код для создаваемых элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...