2011-12-01 119 views
2

我想讓它顯示在div有關的標籤,如果= 1,或隱藏它,如果它= 0不能獲得價值,返回空值

腳本:

function blah(){ 
loadtab('a'); 
loadtab('b'); 
loadtab('c'); 
} 

var page = cheese 

function loadtab(tab){ 
    $('#'+tab).hide(); 
    $('#'+tab).load("devices/" + page + ".html " + "#" + tab); 
     var tabcontent = $("#"+tab).text(); 
     alert(tab); //works 
     alert(tabcontent); //doesn't 
     if (tabcontent == "1"){ 
      $('#'+tab).show(); 
     } 
     else{ 
      $('#'+tab).hide(); 
     } 
} 

*在前面的代碼中定義

HTML上cheese.html變量:

<div id="a">0</div> 
<div id="b">0</div> 
<div id="c">1</div> 

警報標籤給出的a,b和c在單獨的警報。警報標籤內容提供空白警報。爲什麼是這樣?

+1

由於負載( 「裝置/」 + [變量] * +名 「.html」 + 「#」 +標籤)設置空值?另外,您應該使用.html(),而不是.text()。 –

+0

@TomasVoracek我已經在我想做的事情上做得更清楚了,它還會把它設置爲空嗎?如果它是一個div, – Supertod

+0

.text()應該可以正常工作。 –

回答

2

似乎在加載方法完成填充選項卡之前您正在獲取文本。嘗試在.load的回調中執行您的代碼。

$('#'+tab).load("devices/" + page + ".html " + "#" + tab, function(){ 
    var tabcontent = $("#"+tab).text(); 
    alert(tab); //works 
    alert(tabcontent); //doesn't 
    if (tabcontent == "1"){ 
     $('#'+tab).show(); 
    } 
    else{ 
     $('#'+tab).hide(); 
    } 
}); 

在一個側面說明,你應該緩存$('#'+tab)你在函數中使用它相當頻繁。

要緩存選擇器,只需執行此操作。

var $tab = $('#'+tab); // store your jQuery object into a variable 
$tab.hide(); 
$tab.load("devices/" + page + ".html " + "#" + tab); 
    var tabcontent = $tab.text(); 
    alert(tab); //works 
    alert(tabcontent); //doesn't 
    if (tabcontent == "1"){ 
     $tab.show(); 
    } 
    else{ 
     $tab.hide(); 
    } 

它只是提高了性能的jQuery不必繼續搜索選項卡的DOM,您只需保持對它的引用在另一個變量在你的函數的開始。

+0

輝煌,謝謝。高速緩存有什麼幫助?它究竟做了什麼?它將爲b和c加載具有不同數字值的不同htmls。 – Supertod

+0

Supertod看看我的編輯。 –

+0

@Supertod緩存幫助,因爲與使用本機js查找dom元素相比,jquery選擇器並不是最優化的。如果您經常需要提取該元素,那麼最好將其存儲在內存中,這樣您就不必在性能至關重要的關鍵代碼部分重複此過程並浪費處理時間。 –

0

嘗試這樣做:

function loadtab(tab){ 
    $('#'+tab).hide(); 
    $('#'+tab).load("devices/" + page + ".html " + "#" + tab, function() { 
     var tabcontent = $("#"+tab).text(); 
     alert(tab); //works 
     alert(tabcontent); //doesn't 
     if (tabcontent == "1"){ 
      $('#'+tab).show(); 
     } 
     else{ 
      $('#'+tab).hide(); 
     } 
    }); 
}