2013-01-16 39 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