隐藏和显示特定类的跨度

时间:2014-01-03 22:25:53

标签: javascript dom html

当我点击艺术家的名字时,我正在尝试显示艺术家制作的歌曲 这是我的HTML

<div id="artists">
<span class="artist" id="Eminem" onclick="showSongs("Eminem")">Eminem</span>
</div>

<div id="songs">
<span style="display:none;" class="Eminem" id="Eminem - Survival" onclick="playSong('Eminem - Survival');">Survival</span>
</div>

这是我的Javascript

function showSongs(artist) {
document.getElementsByClassName(artist).styles.display="inline";
}

这不是我的所有代码,我有更多的艺术家和更多的歌曲 但重点是当我点击艺术家名字
时,我希望艺术家的歌曲显示出来 我现在用谷歌搜索了一段时间,我发现我必须将span标签显示为内联。

如果您需要更多信息,请询问并编辑帖子

4 个答案:

答案 0 :(得分:1)

编辑:啊,是的,请看另一半问题的其他答案。

这段代码应该可行,我唯一看错的就是这一行:

<span class="artist" id="Eminem" onclick="showSongs("Eminem")">Eminem</span>

你应该在showSongs调用中使用单引号:

<span class="artist" id="Eminem" onclick="showSongs('Eminem')">Eminem</span>

如果这不能解决问题,可能是由页面上的其他代码引起的。

答案 1 :(得分:1)

首先,调整您要发送的艺术家名称以使用单引号,您使用双引号打破字符串。

<span class="artist" id="Eminem" onclick="showSongs('Eminem')">Eminem</span>

然后,当您按类名获取元素时,您正在检索集合并需要循环遍历它们。如下所示:

function showSongs(artist) {
  var elements = document.getElementsByClassName(artist);
  for(var i = 0; i < elements.length; i++) {
      elements[i].style.display="inline";
  }
}

这是jsFiddle

答案 2 :(得分:0)

getElementsByClassName返回类似数组的集合。我不认为你可以用这种方式改变风格..也许你可以试试这个:

function showSongs(artist) {
    var artists = document.getElementsByClassName(artist);
    for(var i = 0; i < artists.length; i++) {
        artists[i].style.display="inline";
    }
}

使用jquery会更轻松。

答案 3 :(得分:0)

您可以: http://jsfiddle.net/LVRGZ/3/

<div id="artists">
    <span class="artist" onclick="showSongs('Eminem')">Eminem</span>
</div>

<div id="Eminem" style="display:none;">
    <span id="Eminem - Survival" onclick="playSong('Eminem - Survival');">Survival</span><br/>
    <span id="Another Song" onclick="playSong('Eminem - 2');">Another Song</span><br/>
    <span id="A Third Song" onclick="playSong('Eminem - 3');">A Third Song</span><br/>
</div>

<script>
showSongs=function(id) {
    alert("Showing "+id);
    document.getElementById(id).style.display='';
}
</script>