#javascript #html #dom
#javascript #HTML #dom
Вопрос:
Я пытаюсь изменить HTML-разметку страницы, чтобы добавить какую-либо кнопку с помощью JavaScript.
Ниже вы можете найти «фрагмент» (довольно длинный, прошу прощения, но мне действительно нужно, чтобы вы поняли структуру страницы) страницы, которую я пытаюсь изменить.
Мой код JavaScript вставляется расширением браузера (я могу успешно добавить JavaScript на страницу и запустить его), и единственная операция, которую он должен выполнить, — это добавить кнопку в нужное положение.
HTML-страница содержит <FORM>
с таблицей в ней.
После нескольких строк и ячеек есть ячейка, которая содержит 3 кнопки ввода:
<input type="submit" name="submit" value="Set Ships">
<input type="button" name="sel" value="Select all" onclick="alert('Not Allowed.');">
<input type="button" name="desel" value="Deselect all" onclick="alert('Not Alloowed.');">
Я бы хотел, чтобы мой JavaScript-код размещал четвертую кнопку сразу после desel
кнопки.
Это код, который я использую для добавления кнопки:
function add() {
var element = document.createElement("input");
element.setAttribute("type", "button");
element.setAttribute("value", "invert");
element.setAttribute("name", "button3");
element.setAttribute("onclick", "foo()");
document.flotta.appendChild(element);
}
Очевидно, что этот код помещает кнопку прямо в конец моего документа, сразу после формы (с именем flotta
).
Я понял, что не могу использовать функцию, getElementById
потому что <td>
с тегом непосредственно перед кнопками не id
связан.
Поэтому я спрашиваю, может ли кто-нибудь указать мне на решение для добавления четвертой кнопки в нужное место.
<html>
<head>
<title>fee foo</title>
. . . head code
</head>
<body >
<div id="Layer" name="Layer" /*other attributes*/"></div>
<table /*table attributes*/>
. . . table content
</table>
<form id="flotta" name="flotta" method="post" action="home.php?sel=gestioneflotta">
<table /*table attributes*/>
<tbody>
<tr><td>
<table /* attributes*/>
<tbody><tr>
<td /* attributes*/></td>
<td /* attributes*/></td>
<td /* attributes*/></td>
</tr>
<tr>
<td /* attributes*/">amp;nbsp;</td>
<td bgcolor="ffffff" background="bg/pergamena.jpg" align="center">
<input type="submit" name="submit" value="Set Ships">
<input type="button" name="sel" value="Select all" onclick="alert('Not Allowed.');">
<input type="button" name="desel" value="Deselect all" onclick="alert('Not Alloowed.');"> </td>
<td background="bg/menu_d.gif">amp;nbsp;</td>
</tr>
<tr>
<td /* attributes*/" width="11" height="11"></td>
<td /* attributes*/></td>
<td /* attributes*/></td>
</tr>
</tbody>
</table>
</td></tr>
<tr>
. . . another row
</tr>
</tbody>
</table>
</form>
<table border="0" cellspacing="0" cellpadding="0" align=center width=510>
. . . another table
</table>
<script type="text/javascript">
some script
</script>
</body>
</html>
Комментарии:
1. Не используйте
setAttribute
для настройки свойств кнопки; вместо этого используйте прямые свойства, напримерelement.type = "button";
. Особенно не используйте этот синтаксис для назначения обработчиков событий, просто используйтеelement.onclick = foo;
(или одну из стандартных функций DOM уровня 2).2. @marcel спасибо за ваш совет, но мое внимание больше сосредоточено на том, как разместить элемент в правильном положении. вы можете помочь?
Ответ №1:
Следующий код должен получить td:
var td = document.getElementsByName('desel')[0].parentNode;
По сути, он получает все поля / кнопки с именем ‘desel’ и, предполагая, что есть только одно, получает родительский элемент первого элемента (который должен быть td, содержащим кнопки).