2011-12-01 122 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(); 
     } 
    }); 
}