|
|
|
| Как изменить код,чтобы в конечной странице были не только html теги, но и код самого скрипта???
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test aspdom</title>
</head>
<script language="javascript">
var dom = new ActiveXObject("microsoft.XMLDOM");
dom.async = false;
dom.load ("file.xml");
var root=dom.documentElement;
function parse(root)
{
var i=0;
if(root.nodeType==1)
{
if(root.nodeName=='SimpleType') mySimpleType(root);
}
else if(root.nodeType==3){}
else
{
document.writeln('<br><br>Error');
}
if(root.childNodes!=null)
{
for(i=0;i<root.childNodes.length;i++)
{
parse(root.childNodes.item(i));
}
}
}
function mySimpleType(root)
{
// document.write('<br>');
elemtext = root.attributes[1].text;
elemname = root.attributes[0].text;
if(elemtext=='Text'){
document.write("<input STYLE='position:absolute;visibility:visible;' type='"+elemtext+"' name='"+elemname+"' id='"+elemname+"' '>");
}
if(elemtext=='Checkbox'){
document.write("<input type='"+elemtext+"' name='"+elemname+"' id='"+elemname+"'>");
}
if(elemtext=='Combo'){
document.write("<select name='"+elemname+"' id='"+elemname+"'>");
myoption(root);
document.write("</select>");
}
if(elemtext=='Radio'){
myradio(root);
}
if(elemtext=='List'){
mylist(root);
}
}
function myoption(root)
{
if(root.nodeName=='SimpleType') {
var t="";
for(i=0;i<root.childNodes.length;i++)
t=t+ "<option>"+root.childNodes[ i].text+"</option>";
document.write(t);
}
}
function myradio(root)
{
if(root.nodeName=='SimpleType') {
var r="";
for(i=0;i<root.childNodes.length;i++)
r=r+ "<input id="+i+" type='"+root.attributes[1].text+"' name='"+root.attributes[0].text+"' id='"+root.attributes[0].text+"'>"+root.childNodes[ i].text+"";
document.write(r);
}
}
function mylist(root)
{
if(root.nodeName=='SimpleType') {
document.write("<select multiple size="+root.attributes[2].text+" name='"+root.attributes[0].text+"' id='"+root.attributes[0].text+"'>");
var r="";
for(i=0;i<root.childNodes.length;i++)
r=r+ "<option>"+root.childNodes[ i].text+"</option>"
document.write(r);
document.write("</select>");
}
}
</script>
<body onload='parse(root);'>
</body>
</html>
|
Xml файл:
<?xml version="1.0" encoding="UTF-8"?>
<all>
<Item name="Test item">
<SimpleType name="tname1" type="Text" id="1"/>
<SimpleType name="cname1" type="Checkbox"/>
<SimpleType name="comname1" type="Combo">
<option>Combo value 1</option>
<option>Combo value 2</option>
<option>Combo value 3</option>
<option>Combo value 4</option>
</SimpleType>
<SimpleType name="cname2" type="Checkbox"/>
<SimpleType name="rname1" type="Radio">
<option>Radio value 1</option>
<option>Radio value 2</option>
<option>Radio value 3</option>
</SimpleType>
<SimpleType name="lname1" type="List" size="3">
<option>List value 1</option>
<option>List value 2</option>
<option>List value 3</option>
</SimpleType>
<SimpleType name="cname3" type="Checkbox"/>
</Item>
</all>
|
| |
|
|
|
|
|
|
|
для: servannin
(27.04.2005 в 17:51)
| | надо запускать функцию parse(root) не используя onload, т.е.
<body onload='parse(root);'>
</body>
|
надо переписать таким образом
<body>
<script language="JavaScript">
parse(root);
</script>
</body>
|
| |
|
|
|
|
|
|
|
для: Crux
(27.04.2005 в 18:27)
| | благодарю!
вот сейчас выводится код и генерируются теги,но кода html тегов нет,только код скрипта.
Мне нужно будет делать некоторые теги скрытыми(т.е. "удалять").
В этом случае возможно это? | |
|
|
|
|
|
|
|
для: servannin
(27.04.2005 в 18:40)
| | и ещё хотел бы спросить вот я ставлю в строчке
document.write("<input STYLE='position:absolute;visibility:visible;' type='"+elemtext+"' name='"+elemname+"' id='"+elemname+"' onclick='zer()' >");
|
это :
а потом при нажатии на элемент text вызывается функция а(), которая делает то-то то-то.
Но почему возникает ошибка - предполагается наличие объекта?? | |
|
|
|
|
|
|
|
для: servannin
(27.04.2005 в 18:56)
| | >Но почему возникает ошибка - предполагается наличие объекта??
нужен какой-то объект:)))
ошибка где-то в функции а() | |
|
|
|
|
|
|
|
для: servannin
(27.04.2005 в 18:40)
| | >вот сейчас выводится код и генерируются теги,но кода html
>тегов нет,только код скрипта.
и не будет.
выберай что-то одно либо тэги либо код
>Мне нужно будет делать некоторые теги скрытыми(т.е.
>"удалять").
>В этом случае возможно это?
не понял, поподробней можно? | |
|
|
|
|
|
|
|
для: Crux
(27.04.2005 в 19:14)
| | да я там написал,что сам не понял, что написал ,когда второй раз прочитал),поподробнее...
сейчас создаётся страница с html-тегами.
При клике на любую кнопку(или текстовое поле или чекбокс) она должна удаляться.У всех созданных элементов будет :STYLE='position:absolute;visibility:visible;'
а при нажатии на элемент буду присваивать этому элементу значение visibility:hidden;
Это возможно сделать если выводится только один код жаваскрипта???? | |
|
|
|
|
|
|
|
для: servannin
(27.04.2005 в 19:24)
| | >Это возможно сделать если выводится только один код жаваскрипта????
а ты попробуй сам, и посмотри что получется...
это называется методом "проб и ошибок" :))
до общения с тобой я о DOM вообще ничего не знал, я прсто открыл свою книгу прочёл что там написанно, а дальше именно этим методом находил ответы на твои вопросы.
если ты не найдёш ответ на этот вопрос, то я тебе подскажу (хотя ты сам сразу увидешь, что да как) | |
|
|
|
|
|
|
|
для: Crux
(27.04.2005 в 19:40)
| | Пока первое,что пришло в голову,заключается в следующем:
Оставить первый вариант,т.е когда выводится не код,а один html.
только перед началом и в конце этих сгенерировавшихся тегов поставить <form...></form>,чтобы они находились в одной форме.
Создать n-ное количество <input type="hidden">.
Потом написать функции доступа к этим тегам (например,document.forms[0].elements[index].type=='text') ну и определять :если мы на него нажали и он виден,то присваиваем ему document.forms[0].elements[index].style.visibility='hidden';и он будет невидим.
Хотя какой-то бред получается,читая этот вариант возникают вопросы как сделать то или то.
Скорее всего я попрошу помощь зала 8-)...
Или как-то по другому? | |
|
|
|
|
|
|
|
для: servannin
(27.04.2005 в 20:45)
| | а чё тут голову нагружать-то?
вопрос был такой: а при нажатии на элемент буду присваивать этому элементу значение visibility:hidden; Это возможно сделать если выводится только один код жаваскрипта????
вот и попробуй... не понравилось... или не работает?.. пробуй по другому.
могу сказать только одно, если правильно всё написанно, то работать должно в любом из этих двух вариантов.
а насчет: только перед началом и в конце этих сгенерировавшихся тегов поставить <form...></form>,чтобы они находились в одной форме.
Создать n-ное количество <input type="hidden">.
Потом написать функции доступа к этим тегам (например,document.forms[0].elements[index].type=='text') ну и определять :если мы на него нажали и он виден,то присваиваем ему document.forms[0].elements[index].style.visibility='hidden';и он будет невидим.
если это надо, то так или иначе это всё предётся написать.
я не вижу здесь каких-либо осложнений. | |
|
|
|
|
|
|
|
для: Crux
(27.04.2005 в 22:31)
| | только вот почему функция zer() работает только для элемента text,а для checkbox'а - нет?При нажатии текстовое поле , всё нормально - оно исчезает,а чекбокс - нет?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test aspdom</title>
</head>
<script language="javascript">
var dom = new ActiveXObject("microsoft.XMLDOM");
dom.async = false;
dom.load ("file.xml");
var root=dom.documentElement;
function parse(root)
{
var i=0;
if(root.nodeType==1)
{
if(root.nodeName=='SimpleType') mySimpleType(root);
}
else if(root.nodeType==3){}
else
{
document.writeln('<br><br>Error');
}
if(root.childNodes!=null)
{
for(i=0;i<root.childNodes.length;i++)
{
parse(root.childNodes.item(i));
}
}
}
function mySimpleType(root)
{
//var h1="";
//document.write("<form>")
//for(i=0;i<1;i++)
//h1=h1+ "<input id="+i+" type='hidden' name='' >";
//document.write(h1);
//document.write("</form>")
// document.write('<br>');
elemtext = root.attributes[1].text;
elemname = root.attributes[0].text;
if(elemtext=='Text'){
//document.write("<form>")
document.write("<input STYLE='position:absolute;visibility:visible;top=250; left=50;' type='"+elemtext+"' name='"+elemname+"' id='"+elemname+"' onclick='zer()' >");
//document.write("</form>")
}
if(elemtext=='Checkbox'){
document.write("<input STYLE='position:absolute;visibility:visible;top=300; left=50;' type='"+elemtext+"' name='"+elemname+"' id='"+elemname+" onclick='zer()' >");
}
if(elemtext=='Combo'){
document.write("<select name='"+elemname+"' id='"+elemname+"'>");
myoption(root);
document.write("</select>");
}
if(elemtext=='Radio'){
myradio(root);
}
if(elemtext=='List'){
mylist(root);
}
}
function myoption(root)
{
if(root.nodeName=='SimpleType') {
var t="";
for(i=0;i<root.childNodes.length;i++)
t=t+ "<option>"+root.childNodes[ i].text+"</option>";
document.write(t);
}
}
function myradio(root)
{
if(root.nodeName=='SimpleType') {
var r="";
for(i=0;i<root.childNodes.length;i++)
r=r+ "<input id="+i+" type='"+root.attributes[1].text+"' name='"+root.attributes[0].text+"' id='"+root.attributes[0].text+"'>"+root.childNodes[ i].text+"";
document.write(r);
}
}
function mylist(root)
{
if(root.nodeName=='SimpleType') {
document.write("<select multiple size="+root.attributes[2].text+" name='"+root.attributes[0].text+"' id='"+root.attributes[0].text+"'>");
var r="";
for(i=0;i<root.childNodes.length;i++)
r=r+ "<option>"+root.childNodes[ i].text+"</option>"
document.write(r);
document.write("</select>");
}
}
function zer(){
id = event.srcElement.id;
if (event.srcElement.style.visibility=='visible') event.srcElement.style.visibility="hidden";
}
</script>
<body>
<script language="JavaScript">
parse(root);
</script>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: servannin
(28.04.2005 в 16:00)
| | ...всё спасибо уже сам разобрался...) | |
|
|
|
|
|
|
|
для: servannin
(28.04.2005 в 16:35)
| | Crux,кстати, метод "проб и ошибок" весьма успешный 8-)..., ты уж извини за надоедливость ,просто здесь ты вроде один в курсе этого скрипта,
никто ,наверное,увидив объём кода,вникать в него не будет(хотя он вроде как оказывается не сложный)...Сейчас при нажатии на любой элемент(кроме radio),а потом при нажатии кнопки delete - элемент исчезает.
Также, при нажатии на любой элемент(кроме radio),а потом при нажатии кнопки edit -
появлется окошечко, в котором можно изменять некоторые значения элемента (при желании их можно сделать больше).
Так вот! У меня 2 вопроса:
1). - как изменить код, чтобы могли удаляться элементы ,даже если у них одинаковые id (сейчас я о radio-элементе говорю,хотя если в xml файле сделать несколько элементов list , то тоже будет работать не правильно)
2). - возможно ли ,например,при выборе элемента,потом при нажатии на кнопку
Add_properties выскакивало окошко,куда вводили бы новое свойство ,например, для текстового поля - 'size=7' и размер поля изменялся и т.д.???
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test aspdom</title>
</head>
<script language="javascript">
var dom = new ActiveXObject("microsoft.XMLDOM");
dom.async = false;
dom.load ("file.xml");
var root=dom.documentElement;
function parse(root)
{
var i=0;
if(root.nodeType==1)
{
if(root.nodeName=='SimpleType') mySimpleType(root);
}
else if(root.nodeType==3){}
else
{
document.writeln('<br><br>Error');
}
if(root.childNodes!=null)
{
for(i=0;i<root.childNodes.length;i++)
{
parse(root.childNodes.item(i));
}
}
}
function mySimpleType(root)
{
document.write('<br>');
elemtext = root.attributes[1].text;
elemname = root.attributes[0].text;
if(elemtext=='Text'){
document.write("<input STYLE='position:absolute;visibility:visible;' type='"+elemtext+"' name='"+elemname+"' value='textvalue' id='"+elemname+"' onclick='zer()' >");
}
if(elemtext=='Checkbox'){
document.write("<input STYLE='position:absolute;visibility:visible;' type='"+elemtext+"' name='"+elemname+"' id='"+elemname+"' value='ch' onclick='zer()' >");
}
if(elemtext=='Combo'){
document.write("<select STYLE='visibility:visible;' name='"+elemname+"' id='"+elemname+"' onclick='zer()'>");
myoption(root);
document.write("</select>");
}
if(elemtext=='Radio'){
myradio(root);
}
if(elemtext=='List'){
mylist(root);
}
}
function myoption(root)
{
if(root.nodeName=='SimpleType') {
var t="";
for(i=0;i<root.childNodes.length;i++)
t=t+ "<option>"+root.childNodes[ i].text+"</option>";
document.write(t);
}
}
function myradio(root)
{
if(root.nodeName=='SimpleType') {
var r="";
for(i=0;i<root.childNodes.length;i++)
r=r+ "<input STYLE='visibility:visible;' onclick='zer()' type='"+root.attributes[1].text+"' name='"+root.attributes[0].text+"' id='"+root.attributes[0].text+"'>"+root.childNodes[ i].text+"";
document.write(r);
}
}
function mylist(root)
{
if(root.nodeName=='SimpleType') {
document.write("<select STYLE='visibility:visible;' onclick='zer()' multiple size="+root.attributes[2].text+" name='"+root.attributes[0].text+"' id='"+root.attributes[0].text+"'>");
var r="";
for(i=0;i<root.childNodes.length;i++)
r=r+ "<option>"+root.childNodes[ i].text+"</option>"
document.write(r);
document.write("</select>");
}
}
function zer(){
id = event.srcElement.id;
}
function k(){
name = event.srcElement.name;
if(name=='hide'){
document.getElementById(id).style.visibility='hidden';
}
if(name=='prop'){
var x=prompt('Ââåäèòå çíà÷åíèå îáúåêòà :',document.getElementById(id).id);
}
if(name=='edit'){
gid = document.getElementById(id).type;
if(gid=='select-one'){
selectNum = document.getElementById(id).selectedIndex;
selectText = prompt("Ââåäèòå çíà÷åíèå îáúåêòà :", document.getElementById(id).options[selectNum].text);
if(selectText)
{
document.getElementById(id).options[selectNum].text = selectText;
}
}
if(gid=='select-multiple'){
selectNum = document.getElementById(id).selectedIndex;
selectText = prompt("Ââåäèòå çíà÷åíèå îáúåêòà :", document.getElementById(id).options[selectNum].text);
if(selectText)
{
document.getElementById(id).options[selectNum].text = selectText;
}
}
if(gid=='text'){
selectText = prompt("Ââåäèòå çíà÷åíèå îáúåêòà :", document.getElementById(id).value);
if(selectText)
{
document.getElementById(id).value = selectText;
}
}
if(gid=='checkbox'){
selectText = prompt("Ââåäèòå çíà÷åíèå îáúåêòà :", document.getElementById(id).value);
if(selectText)
{
document.getElementById(id).value = selectText;
}
var z=prompt('Ââåäèòå ñîñòîÿíèå (checked / nochecked) îáúåêòà : ',document.getElementById(id).checked);
if(z=='checked')
{
document.getElementById(id).checked =true;
}
else if(z=='nochecked')
{
document.getElementById(id).checked =false;
}
}
}
}
</script>
<body>
<script language="JavaScript">
parse(root);
document.write("<br>")
document.write('<input type="submit" name="hide" style="top:350;left:50" value="Delete" onclick="k()">');
document.write("<br><br>")
document.write('<input type="submit" name="edit" style="top:350;left:150" value="Edit" onclick="k()">');
document.write("<br><br>")
document.write('<input type="submit" name="prop" style="top:350;left:250" value="Add_properties" onclick="k()">');
</script>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: servannin
(29.04.2005 в 18:04)
| | 1. надо избегать одинаковых id
r=r+ "<input STYLE='visibility:visible;' onclick='zer()' type='"+root.attributes[1].text+"' name='"+root.attributes[0].text+"' id='"+root.attributes[0].text+i+"'>"+root.childNodes[ i].text+"";
|
2. а вчём проблема, работает также как и с другими свойствами
document.getElementById(id).size='100'
|
PS просьба, если код который ты хочешь выложить слишком большой, то просто прикрепляй его файлом, а то например у меня внешний трафик платный и постоянно кочать лишнии байтики - это очень напряжно. | |
|
|
|
|
|
|
|
для: Crux
(29.04.2005 в 19:42)
| | да...,но если вставить в xml файл этот код,то не работает)
<?xml version="1.0" encoding="UTF-8"?>
<all>
<Item name="Test item">
<SimpleType name="tname1" type="Text" id="1"/>
<SimpleType name="cname1" type="Checkbox"/>
<SimpleType name="comname1" type="Combo">
<option>Combo value 1</option>
<option>Combo value 2</option>
<option>Combo value 3</option>
<option>Combo value 4</option>
</SimpleType>
<SimpleType name="cname2" type="Checkbox"/>
<SimpleType name="rname1" type="Radio">
<option>Radio value 1</option>
<option>Radio value 2</option>
<option>Radio value 3</option>
</SimpleType>
<SimpleType name="lname1" type="List" size="3">
<option>List value 1</option>
<option>List value 2</option>
<option>List value 3</option>
</SimpleType>
<SimpleType name="cname3" type="Checkbox"/>
<SimpleType name="rname1" type="Radio">
<option>Radio value 1</option>
<option>Radio value 2</option>
</SimpleType>
</Item>
</all>
|
| |
|
|
|
|
|
|
|
для: servannin
(29.04.2005 в 20:40)
| | тут получается , что присваиваются id разные только если в xml файле одна radio-группа,а если ещё вставить, то естественно они имеют те же id ,что и первый radio.
как бы сделать это по другому???чтобы у всех были id разные....и вохможно ли это вообще??? | |
|
|
|
|
|
|
|
для: servannin
(29.04.2005 в 22:47)
| | xml
<?xml version="1.0" encoding="UTF-8"?>
<all>
<Item name="Test item">
<SimpleType name="tname1" type="Text" id="1"/>
<SimpleType name="cname1" type="Checkbox"/>
<SimpleType name="comname1" type="Combo">
<option>Combo value 1</option>
<option>Combo value 2</option>
<option>Combo value 3</option>
<option>Combo value 4</option>
</SimpleType>
<SimpleType name="cname2" type="Checkbox"/>
<SimpleType name="rname1" type="Radio" id="id1">
<option>Radio value 1</option>
<option>Radio value 2</option>
<option>Radio value 3</option>
</SimpleType>
<SimpleType name="lname1" type="List" size="3">
<option>List value 1</option>
<option>List value 2</option>
<option>List value 3</option>
</SimpleType>
<SimpleType name="cname3" type="Checkbox"/>
<SimpleType name="rname1" type="Radio" id="id2">
<option>Radio value 1</option>
<option>Radio value 2</option>
</SimpleType>
</Item>
</all>
|
код
r=r+ "<input STYLE='visibility:visible;' onclick='zer()' type='"+root.attributes[1].text+"' name='"+root.attributes[0].text+"' id='"+root.attributes[2].text+i+"'>"+root.childNodes[ i].text+"";
|
нужно лишь проявить немного фантазии | |
|
|
|
|
|
|
|
для: Crux
(30.04.2005 в 08:12)
| | ...как сделать,чтобы в левом фрейме выводились значения атрибутов name тегов <Item name="Name 1">...</Item>,
<Item name="Name 2">...</Item> и т.д. в виде ссылок,при нажатии на которые в правом фрейме выводились,html элементы , теги которых лежат между тегами
<Item name="Name 1">...</Item> с именем Name 1 и т.д.Т.е нажимаем на Name 2 - выводятся
html-элементы тех Simpletype'ов,которые заключены между <Item name="Name 2">...</Item> ??? Crux, если есть желание ,пожалуйста помоги.Это ,наконец-то,финиш(ну почти ,остальное я сам доделаю)...файл прикреплён.
Спасибо | |
|
|
|
|