Javascript" document.getElementById"通配符循环?

时间:2014-11-18 15:03:33

标签: javascript html css vb.net loops

可以将通配符与Javascript" document.getElementById"一起使用。线?

我有一个带有3个div元素的Vb.net表单(" page1,page2,page3")。我希望完成的是允许用户点击按钮或超链接按钮,将其导航到下一个div("页面#")。有没有办法做以下的事情&循环遍历每个元素,其中包含" page1"," page2"," page3"等没有硬编码的ID?

function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'none')
e.style.display = 'block';
else
e.style.display = 'none';

3 个答案:

答案 0 :(得分:1)

根据我的理解,您正在寻找querySelectorAll函数和for-in循环:

var elements = document.querySelectorAll("[id^='page']");
for(var e in elements){
   // do Stuff - each element get's reached by elements[e]
}

例如:

var elements = document.querySelectorAll("[id^='page']");
for(var e in elements){
   if(elements[e].style.display == 'none')
        elements[e].style.display = 'block';
    else
        elements[e].style.display = 'none';
}

这将捕获所有带有id" page"并切换他们的知名度

答案 1 :(得分:0)

简答:不,这是不可能的。正如Markai指出的那样,这是可能的。我仍然觉得使用类更合适,因为这样可以更好地捕获语义。

更长一点的回答:也许你可以给每个元素一个class="page"。然后,您可以隐藏该类的所有元素,只显示您感兴趣的元素。您可以使用类'页面'使用document.getElementsByClassName('page')或更友好的jQuery选择器$('.page')

答案 2 :(得分:0)

你可以循环元素。而不是切换,隐藏除所需元素之外的所有元素。

function EnableVisibility(elementName, elementId)
{
    for(i=1;i<4;i++)
    {
        if(i == elementId)
             document.getElementById(elementName + i).style.display = 'block';
        else
             document.getElementById(elementName + i).style.display = 'none';
    }
}

EnableVisibility("page", 2); // This would hide all pages and display page2

如果你不喜欢硬编码的4,你可以用一段时间改变for循环,如果getElementById返回null,则退出循环。

我个人喜欢Martijn的课堂创意,而不是直接改变风格,你可以添加或删除一个类ex:class =“page visible”class =“page hidden”