2013-01-16 4 views
3

У меня проблема с jQuery. Я хочу написать функцию, которая динамически заменяет некоторый контент в моем HTML.JQuery изменить html с каждым

Это функция:

function renderPage(datas, html) { 
    $(html).find("*").each(function(){ 
     if ($(this).attr("data-func")) { 
      var df = $(this).attr("data-func"); 
      var content = null; 
      eval("content = " + df + "($(this),datas);"); 
      console.log(content); 
     } 
    }); 
} 

Проблема заключается в том, что она не имеет никакого эффекта! Я вижу в журнале, что переменная содержимого права, но результат не отличается.

Моя функция в Eval:

function fill(element,data) { 
    element.html("BASSZA MEG"); 
    var events = data.events; 

    var i = 0; 
    var n = events.length; 

    for (;i<n; i++) { 
     obj = events[i]; 
     var tr = $("<tr>"); 
     var nev = $("<td>"); 
     var link = $("<a href='programbelso.html#id="+obj["event_id"]+"&logo="+obj["event_logo"]+"'>"); 
     link.html(obj["event_name"]); 
     nev.append(link); 
     tr.append(nev); 
     element.append(tr); 
    } 

    console.log("element: " + element); 
    return element; 
} 
+1

И что же сказать консоль? – Joseph

ответ

1

Во-первых, не петлю на каждого элемента в документе, а затем использовать if() заявление. Вы можете значительно улучшить производительность, используя правый селектор.

Следующий пример должен добиться того, что вы пытаетесь сделать без необходимости использовать функцию зла eval() тоже:

function renderPage(datas, html) { 
    $('[data-func]').each(function() { 
     var df = $(this).attr("data-func"); 
     var the_func = window[$(this).attr("data-func")]; 

     if(typeof the_func === 'function') { 
      var content = the_func($(this), datas); 
      console.log(content); 
     } 
    }); 
} 
+0

Что на самом деле появляется в консоли? – BenM

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