Próbowałem wydrukować raport roczny, ale muszę zmienić 2 teksty wokół strony, jeden z nich ma tylko atrybut klasy. Jestem nowy w JS, więc zrobiłem to.

<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>

A drugi ma identyfikator.

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

Sprawiłam, że działa na 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;
}

Ale w rzucach Firefox

[10: 48: 48.330] TypeError: Document.GetElementsByClassName (...) [0] jest niezdefiniowany

Edytuj: Więc pozwól mi wyjaśnić więcej.

Właściwie pracuję w 2 iframes, który pierwszy jest dla menu, a drugi jest dla większej liczby opcji. Następnie centralny iframe służy do pokazywania rzeczywistego raportu. Może muszę zdefiniować, który iframe chcę odzyskać te elementy.

1
Isxida 9 grudzień 2013, 19:58

3 odpowiedzi

Najlepsza odpowiedź

Jest tu 2 problemy. Pierwszy powoduje, że błąd document.getElementsByClassName(...)[0] is undefined i raz pokonany, druga jest taka, że Firefox nie obsługuje IntreTEXT

Jedynym sposobem wygenerowania określonego błędu w Firefoksie jest dla żadnych elementów z określoną klasą obecną na stronie. Jest to zademonstrowane przez następujący kod

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

Jsfiddle: http://jsfiddle.net/ul2xs/

Jeśli oglądasz konsolę podczas prowadzenia powyższego skrzypce, zobaczysz ten sam błąd, w którym dostaniesz.

Czy możliwe jest uruchomienie JavaScript, zanim strona zakończyła ładowanie?

Drugi i bardziej drobny problem polega na tym, że Firefox nie obsługuje innerText. Powinieneś użyć .textContent lub ewentualnie .innerHTML.

3
Community 23 maj 2017, 10:28

Prawdopodobnie powinieneś użyć:

 iframe.contentDocument.getElementsByClassName(...)

(Patrz: ContentDocument dla IFrame)

1
Community 23 maj 2017, 12:10

Zasadniczo .innerText nie będzie działać w FF. Ff używa nieruchomości textContent.

var text = element.textContent;
element.textContent = "this is some sample text";
-2
Irfan TahirKheli 9 grudzień 2013, 16:05