Одна из наиболее распространенных задач, с которыми веб-разработчики сталкиваются каждый день, — это изменение содержимого веб-страницы без дополнительных запросов к веб-серверу. Самый простой способ выполнить это назначение — использовать слои.
Здесь я покажу вам, как переписать содержимое слоя с помощью простой функции, которую можно многократно использовать в вашем коде Javascript. Эта функция работает в обоих основных браузерах — Netscape 4. * / 6/7 и IE 4/5/6. Рассмотрим этот фрагмент кода:
<DIV ID="MyLayer" style="position:absolute;top:10px;
left:10px;">Initial layer text</DIV>
<script language="Javascript">
function WriteLayer(ID,parentID,sText) {
if (document.layers) {
var oLayer;
if(parentID){
oLayer = eval('document.' + parentID + '.document.' + ID + '.document');
}else{
oLayer = document.layers[ID].document;
}
oLayer.open();
oLayer.write(sText);
oLayer.close();
}
else if (parseInt(navigator.appVersion)>=5&&navigator.
appName=="Netscape") {
document.getElementById(ID).innerHTML = sText;
}
else if (document.all) document.all[ID].innerHTML = sText
}
</script>
<form>
<br><br>
<input type="button" value="Display Time" onclick="WriteLayer
('MyLayer',null,Date())">
</form>
Давайте сначала подробнее рассмотрим WriteLayer()
Функция принимает 3 параметра: ID
parentID
sText
ID
MyLayer
Второй параметр parentID
Это просто «слои внутри слоев». Пример вложенных слоев:
<DIV ID=
"ParentLayer"><div ID= "ChildLayer"></DIV></DIV>
У вас нет прямого доступа к вложенному слою в Netscape 4. *. Единственный способ получить к нему доступ через родительский уровень:
var oChildLayer = document.ParentLayer.document.ChildLayer.document;
Когда мы вызываем WriteLayer()
parentID
Если уровень является вложенным, parentID
Третий параметр, sText
Наша WriteLayer()
Если браузер Netscape 4. *, выполняется следующий код:
var oLayer;
if(parentID){
oLayer = eval('document.' + parentID + '.document.' + ID + '.document');
}else{
oLayer = document.layers[ID].document;
}
oLayer.open();
oLayer.write(sText);
oLayer.close();
На первом этапе мы объявляем переменную oLayer
На следующем шаге мы проверяем, является ли значение parentID
null
Если это не так, выполняется следующая строка:
oLayer = eval('document.' + parentID + '.document.' + ID + '.document');
Для тех из вас, кто не знаком с функцией JavaScript eval()
Аргумент функции eval()
Если строка представляет выражение, eval()
Если аргумент представляет один или несколько операторов JavaScript, eval()
Если мы вызываем нашу WriteText()
WriteLayer("ChildLayer","ParentLayer","Some text...")
тогда выражение будет оценено как:
oLayer = document.ParentLayer.document.ChildLayer.document;
Если параметр parentID
null
oLayer = document.layers[ID].document;
Получив ссылку на наш слой, мы просто открываем объект документа слоя, записываем в него значение sText и закрываем документ.
oLayer.open();
oLayer.write(sText);
oLayer.close();
Переписать содержимое слоя в Netscape 6/7 намного проще. Все, что нам нужно, это присвоить значение sText
innerHTML
getElementById
document.getElementById(ID).innerHTML = sText;
Переписать содержимое слоя в IE тоже легко, потому что единственное, что нам нужно сделать, это присвоить значение sText свойству innerHTML нашего слоя, доступ к которому осуществляется через всю коллекцию:
document.all[ID].innerHTML = sText;
Вы можете использовать WriteLayer()
Чтобы увидеть нашу WriteLayer()
здесь .