jQuery, почему этот цикл выполняется дважды? - PullRequest
0 голосов
/ 17 февраля 2011
$(document).bind("ready", function(){

    // Loop each construct tag
    $('construct').each(
            alert('running');

        function ()
        {
            // Grab data
            var jC2_events = $(this).html().split('\n');
            $(this).html('');

            // Data
            var jC2_html = '';

            // Add wrapper tags
            jC2_html += '<div class="jC2_Outer">';
            jC2_html += '<div class="jC2_Toolbar">';
            jC2_html += '<a href="#" class="jC2_ToolbarA">Plain Text</a>';
            jC2_html += '<a href="#" class="jC2_ToolbarA">Help</a>';
            jC2_html += '</div>';
            jC2_html += '<div class="jC2_Container">';

            // Loop each event
            for(var jC2_looper = 0; jC2_looper < jC2_events.length; jC2_looper++)
            {           
                // Split event into components
                var jC2_components = jC2_events[jC2_looper].split(':');

                // Event wrapper
                jC2_html += '<div class="jC2_EventNum">' + (jC2_looper + 1) + '</div>'
                jC2_html += '<div class="jC2_EventWrapper">';
                    jC2_html += '<div class="jC2_EventObject">' + jC2_components[0].trim() + '</div>';
                    jC2_html += '<div class="jC2_EventBreak"></div>';
                    jC2_html += '<div class="jC2_EventDesc">' + jC2_components[1].trim() + '</div>';        
                jC2_html += '</div>';

                // Actions
                jC2_html += '<div class="jC2_ActionWrapper">';

                // Loop remaining params
                for(var jC2_looper2 = 2; jC2_looper2 < jC2_components.length; jC2_looper2++)
                {
                    var jC2_actionClass;
                    if((jC2_looper2%2) == 0){
                        jC2_actionClass = 'jC2_Odd';
                    }else{
                        jC2_actionClass = 'jC2_Even';
                    }

                    jC2_html += '<div class="jC2_ActionLeft"></div>';
                    jC2_html += '<div class="jC2_ActionDesc ' + jC2_actionClass + '">' + jC2_components[jC2_looper2].trim() + '</div>';
                    jC2_html += '<div class="jC2_Clear"></div>';
                }               

                jC2_html += '</div><div class="jC2_Clear"></div>';
            }

            // End wrappers
            jC2_html += '</div>';
            jC2_html += '<div class="jC2_FooterInfo"><div class="jC2_Scirra"><a class="jC2_AS" href="http://www.scirra.com">Scirra.com</a> - Software in Motion</div>Generated with <a class="jC2_AF" href="http://www.scirra.com">JConstruct 1.0</a></div>';
            jC2_html += '</div>';
            $(this).html(jC2_html);
        }
    );

});

И моя HTML-страница:

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.<br /><br />

<construct>
System:Every tick:Set width to Y-100:Set angle to Atan(Self.X-Mouse.X):Finish it
Sprite:On event:Do this:Do that:Do something else
Clock:Ticks and chimes:Do something:Do it again!:Add one
</construct>

<br /><br />When an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

Я просто пытаюсь зациклить каждый тег и отобразить его содержимое в виде красиво отформатированного HTML-кода, но у меня возникают проблемы при разборе данных на отдельные строки, и возникают проблемы, поскольку этот цикл запускается дважды, когда я помещаю предупреждение в это.

Ответы [ 2 ]

1 голос
/ 17 февраля 2011
// Loop each construct tag
$('construct').each(
        alert('running');

    function ()
    {

Следует читать:

// Loop each construct tag
$('construct').each(
    function ()
    {
        alert('running');

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

См. http://jsfiddle.net/uBFAK/

0 голосов
/ 17 февраля 2011

Предупреждение не должно быть за пределами функции.

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