Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript显示/隐藏表行-可以使用ID-如何使用类?_Javascript_Html Table - Fatal编程技术网

使用Javascript显示/隐藏表行-可以使用ID-如何使用类?

使用Javascript显示/隐藏表行-可以使用ID-如何使用类?,javascript,html-table,Javascript,Html Table,我有一张表,上面列出了吉他店的商品——每行包含一件商品。每行(和每件商品)要么是新的,要么是旧的,要么是寄售的。我希望用户能够单击侧边栏UL中的链接(单击New、Used或Cons),并且只有相应条件的表行保持可见。因此,如果用户单击“已使用”,则所有新行和Cons行都将隐藏 我已经用一些简单的JavaScript实现了这一点,但是它使用了getElementByID,这对我来说不起作用,因为我需要用类来标识TRs。这就是我被难倒的地方。我不知道如何在课堂上做到这一点 以下是我迄今为止所制定的解

我有一张表,上面列出了吉他店的商品——每行包含一件商品。每行(和每件商品)要么是新的,要么是旧的,要么是寄售的。我希望用户能够单击侧边栏UL中的链接(单击New、Used或Cons),并且只有相应条件的表行保持可见。因此,如果用户单击“已使用”,则所有新行和Cons行都将隐藏

我已经用一些简单的JavaScript实现了这一点,但是它使用了
getElementByID
,这对我来说不起作用,因为我需要用类来标识TRs。这就是我被难倒的地方。我不知道如何在课堂上做到这一点

以下是我迄今为止所制定的解决方案:

<html>
<head>



<script>

function used() { 
   document.getElementById("new").style.display = 'none';
   document.getElementById("cons").style.display = 'none';
   document.getElementById("used").style.display = '';
}

function news() { 
   document.getElementByClass("new").style.display = '';
   document.getElementById("cons").style.display = 'none';
   document.getElementById("used").style.display = 'none';
}

function cons() { 
   document.getElementByClass("new").style.display = 'none';
   document.getElementById("cons").style.display = '';
   document.getElementById("used").style.display = 'none';
}
</script>


</head>
<body>
<span onClick="used();">Used</span><br />
<span onClick="news();">New</span><br />
<span onClick="cons();">Cons</span><br /><br />

<table border="1">
<tr id="used">
<td>Used</td>
</tr>
<tr id="new">
<td>New</td>
</tr>
<tr id="cons">
<td>Cons</td>
</tr>
</table>

</body>
</html>

函数已使用(){
document.getElementById(“新”).style.display='none';
document.getElementById(“cons”).style.display='none';
document.getElementById(“已使用”).style.display='';
}
函数news(){
document.getElementByClass(“新”).style.display='';
document.getElementById(“cons”).style.display='none';
document.getElementById(“used”).style.display='none';
}
函数cons(){
document.getElementByClass(“新”).style.display='none';
document.getElementById(“cons”).style.display='';
document.getElementById(“used”).style.display='none';
}
已使用
新的
缺点

使用 新的 欺骗
上面的代码工作正常,如果我能让它与类一起工作,它将解决我当前的需要。不过,最终我还是想把它扩展到品牌上——这样用户就可以点击某个品牌,只看到该品牌的帖子。在这种情况下,我可能有20或30个品牌在表中,所以上述将不是理想的。此外,这将最终生活在Wordpress网站上,我理想的做法是从Wordpress中的元数据为每个品牌创建类,类似地,创建一个动态UL,其中包含切换表的品牌,以及一个js解决方案,可以处理不断变化的变量集!所以我知道我上面提到的不是最好的方法,但这是我现在唯一知道的可以尝试的方法

非常感谢您在以上方面的帮助,以及在我迈向更具挑战性的品牌方面时,如何更有效地做到这一点的建议

编辑:

谷歌帮了我的忙,我有了一个新的方向——这可能会解决我的问题:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<title>Sandbox</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<style type="text/css" media="screen">
</style>


</head>
<body>
  <ul class="side-nav">
<li><a class="cond" href="#">Show all</a></li>
<li><a class="used" href="#">Used</a></li>
<li><a class="new" href="#">New</a></li>
<li><a class="cons" href="#">Cons</a></li>

</ul>

<table>
<tr class="cond used">
<td>A Used Item</td>
<td>Used.</td>
</tr>
<tr class="cond new">
<td>A New Item</td>
<td>New</td>
</tr>
<tr class="cond cons">
<td>A Cons Item</td>
<td>Cons</td>
</tr>
</table>
<script>
$(function()
{
    $('ul.side-nav a').click(function()
    {
       $('tr.cond').hide();
       $('tr.' + $(this).attr('class')).show();       
    });
});
</script>

</body>
</html>

沙箱
二手货 用过。 新项目 新的 缺点 欺骗 $(函数() { $('ul.side-nav a')。单击(函数() { $('tr.cond').hide(); $('tr.+$(this.attr('class')).show(); }); });
document.getElementsByCassName返回一个
节点列表,而不是一个元素,我建议使用jQuery,因为您只需要使用类似
$('.new').toggle()的东西

或者,如果您想要纯JS,请尝试:

function toggle_by_class(cls, on) {
    var lst = document.getElementsByClassName(cls);
    for(var i = 0; i < lst.length; ++i) {
        lst[i].style.display = on ? '' : 'none';
    }
}
按类切换函数(cls,on){
var lst=document.getElementsByClassName(cls);
对于(变量i=0;i
您可以更改整个表的类并在CSS中使用级联:

JQuery 10.1.2有一个很好的显示和隐藏函数,它封装了您正在讨论的行为。这将节省您编写新函数或跟踪css类的时间

$("new").show();

$("new").hide();

我强烈建议使用jQuery而不是纯Javascript,不过请查看我的答案,了解纯Javascript解决方案。我完全同意jQuery!实际上,我可能已经找到了使用jquery的解决方案——现在看看它。我仍然不知道以后我将如何动态地实现这一点,但我想一步一步地实现。您这样做似乎很好,动态是什么意思?像ajax?我正在将其构建到wordpress站点中——我发现的新方法在沙盒文件中有效,但在wordpress中不起作用。我不知道为什么-我想知道你是否有想法?这里是链接:无需担心!通过移动一些类来实现它。工作令人惊叹的。谢谢你的帮助!“document.getElementByClass”不适用于我(Safari 10.1.1),也不出现在Flanagan(O'Reilly JavaScript 6e)中。我建议将其更改为“document.getElementsByClassName”,它在Flanagan中运行。