строка jquery для преобразования функции

Это возможно?

<div id="anything">I will change</div>
<div id="id" jq="$('#anything').css({background: 'red'})"></div>

var x = '$('#id').attr('jq')';
jQuery.call(x);

По сути, я хотел бы использовать атрибут jq для любого тега, чтобы он действовал так же, как onclick для html, который вызывает операторы javascript.

Кстати, jQuery.call() предназначен для демонстрационных целей, он не работает...


person Val    schedule 13.01.2010    source источник


Ответы (2)


Вы бы использовали eval(), но то, что вы делаете, кажется очень плохой идеей:

var x = $('#id').attr('jq');
eval(x);

Причина, по которой это плохо, заключается в том, что вы не отделяете функцию от структуры. HTML предназначен для описания структуры, а не интерактивности и функции.

JavaScript предназначен для обеспечения этого взаимодействия и улучшения, но не структуры. Подобное использование встроенного jQuery является нарушением этого разделения. Просто пища для размышлений...

person Doug Neiner    schedule 13.01.2010
comment
я не уверен, что действительно понял это. все, что я хочу, чтобы атрибут jq содержал инструкции js/jQuery и интерпретировал их, как если бы они были написаны в теге ‹script›... jq всегда может быть jq="foo()" или jq="$('#anything').draggable()" или что-то еще, о чем вы могли подумать... - person Val; 14.01.2010
comment
Действительно, часть привлекательности jQuery заключается в том, что он позволяет легко писать код, хорошо отделенный от HTML. Возврат кода в разметку (и одновременное превращение разметки в недействительную) не кажется шагом вперед. - person bobince; 14.01.2010
comment
хорошо, вот моя проблема... я пытаюсь использовать ajax с источником example.html, чтобы получить страницу, но на example.html, если есть тег <script>// jqeury code here // or javascript</script>, это всегда блокируется по соображениям безопасности... так что это мой единственный способ сделать это возможно, я думаю - person Val; 14.01.2010
comment
Теги <script> в возвращаемом контенте не блокируются как таковые, просто они не работают должным образом в разных браузерах. Вы можете передать фрагмент HTML и некоторый скрипт как отдельные члены объекта JSON... но, тем не менее, сомнительно передавать обратно и динамически выполнять код IMO. Почти всегда лучше сохранять весь код статическим. - person bobince; 14.01.2010

вы можете использовать новую функцию MDN.

тело:

<div id='MyFunc' func="alert('Hello!');" >On Load raise an Alert</div>

js:

var myFunc = myFunc || document.getElementById('MyFunc'),
        hello = new Function( myFunc.getAttribute('func'));
    hello.call(this);

попробуйте:

http://jsfiddle.net/msLsy/

Надеюсь, поможет!

person Gago Ar    schedule 12.04.2013