如何处理getElementById返回Null

时间:2015-03-25 08:44:47

标签: javascript jquery null

在我们的网络应用程序上有很多页面。其中一些包含元素" Ribbon.ListForm.Display.Manage.Workflows-Medium"有些页面没有。

我想使用相同的脚本来检查所有页面。该脚本将隐藏元素" Ribbon.ListForm.Display.Manage"," Ribbon.ListForm.Display.Manage.Workflows-Medium"和" Ribbon.ListForm.Display.Manage.CheckOut-Large"如果有的话。

 function hideEdit() {
        var edit = document.getElementById("Ribbon.ListForm.Display.Manage");
        if (typeof edit !== "undefined" && edit.value == ''){edit.style.display = "none";};
        var wf = document.getElementById("Ribbon.ListForm.Display.Manage.Workflows-Medium");
        if (typeof wf !== "undefined" && wf.value == ''){wf.style.display = "none";};
        var checkout = document.getElementById("Ribbon.ListForm.Display.Manage.CheckOut-Large");
        if (typeof checkout !== "undefined" && checkout.value == ''){checkout.style.display = "none";};
}       

问题是当一个页面不包含" Ribbon.ListForm.Display.Manage.Workflows-Medium" (第二个元素)但包含" Ribbon.ListForm.Display.Manage.CheckOut-Large" (第3个元素),脚本将在中间停止,错误[object is null or undefined]。因此,第一个元素被隐藏,但第三个元素不被隐藏。

请问您如何修改我的脚本?谢谢。

4 个答案:

答案 0 :(得分:2)

因为getElementById()如果找不到元素,则返回null。

  

元素是对Element对象的引用,如果是元素则为null   具有指定ID的文件不在文档中。

您可以检查truthy值而不是使用typeof test

if (edit && edit.value == ''){edit.style.display = "none";};

演示:Fiddle

答案 1 :(得分:1)

你可以像这样检查null元素:

if (edit!=null && edit.value == '') 
if (wf!=null && wf.value == '')
if (checkout!=null && checkout.value == '')

答案 2 :(得分:1)

因为问题用jQuery标记:

$('#Ribbon\.ListForm\.Display\.Manage,#Ribbon\.ListForm\.Display\.Manage\.Workflows-Medium,#Ribbon\.ListForm\.Display\.Manage\.CheckOut-Large')
    .filter(function() {
        return this.value == '';
    })
    .hide();

首先,它会选择你感兴趣的元素;然后,它将隐藏与基于值的简单过滤器匹配的那些。

答案 3 :(得分:1)

即使页面中不存在该元素,返回类型也将是对象,返回值将为null。 所以,你也可以查看空案例。 请参阅修改后的代码。

function hideEdit() {
    var edit = document.getElementById("Ribbon.ListForm.Display.Manage");
    if ( edit != null && typeof edit !== "undefined" && edit.value == ''){edit.style.display = "none";};
    var wf = document.getElementById("Ribbon.ListForm.Display.Manage.Workflows-Medium");
    if (wf != null && typeof wf !== "undefined" && wf.value == ''){wf.style.display = "none";}
    var checkout = document.getElementById("Ribbon.ListForm.Display.Manage.CheckOut-Large");
    if (checkout != null && typeof checkout !== "undefined" && checkout.value == ''){checkout.style.display = "none";}

}

感谢, VARUN。