getElementsByClassName无法在firefox上运行

时间:2013-12-09 15:58:06

标签: javascript firefox

我正在尝试打印一份报告,但我需要更改页面周围的两个文本,其中一个只有一个类属性。我是js的新人,所以我做了这个。

<div id="formBusqPresElec:dtResBSPE_paginator_bottom" class="ui-paginator ui-paginator-bottom ui-widget-header">
    <span class="ui-paginator-current">Mostrando 1-20 de 1626 registros</span> 
</div>

另一个有身份证。

<div id="fBusqSPE">Mostrando 20 de 1626 registros</div>

我在Chrome上运行了

function imprimir() {
    var oldText = document.getElementById('fBusqSPE').innerText;
    document.getElementById('fBusqSPE').innerText = document.getElementsByClassName('ui-paginator-current')[0].innerText;
    window.print();
    document.getElementById('fBusqSPE').innerText = oldText;
}

但是在Firefox中抛出

  

[10:48:48.330] TypeError:document.getElementsByClassName(...)[0]是   未定义

编辑:所以让我解释一下。

实际上我在2个iframe中工作,第一个用于菜单,另一个用于更多选项。然后使用中央iframe显示实际报告。 也许我必须定义哪个iframe我想要检索这些元素。

3 个答案:

答案 0 :(得分:3)

这里有两个问题。第一个导致您的错误为document.getElementsByClassName(...)[0] is undefined,一旦克服,第二个是Firefox does not support innerText

在Firefox中生成指定错误的唯一方法是不在页面上显示指定类的元素。以下代码

证明了这一点
<div class="a-test"></div>
// on page load
document.getElementsByClassName("b-test")[0].innerHTML="Test"; 

的jsfiddle:http://jsfiddle.net/UL2Xs/

如果您在运行上述小提琴时观看控制台,您将看到与您相同的错误。

在页面加载完成之前,您的javascript是否可能正在运行?

第二个也是一个小问题是FireFox不支持innerText。您应该使用.textContent.innerHTML

答案 1 :(得分:1)

您可能应该使用:

 iframe.contentDocument.getElementsByClassName(...)

(见:contentDocument for an iframe

答案 2 :(得分:-2)

基本上.innerText在FF中不起作用。 FF使用textContent属性。

var text = element.textContent;
element.textContent = "this is some sample text";