У меня есть повторяющаяся таблица, где название элементов было бы (например, 'tdName_1' 'tdName_2'), и я задавался вопросом, будет ли это возможно к getElementsByName ('tdName _').
PS: Я не могу использовать JQuery.
Заранее спасибо.
Cesar.
Это невозможно. В продолжение этого ответа я предполагаю, что интересующие вас элементы - это Вам придется создать список подходящих элементов вручную. Если вы все же решите использовать атрибут Непросто или вероятно возможно с Очевидно, нет. Но вы можете использовать getElementsByTagName () и затем отфильтровать по имени: Как сказал Тим Даун, атрибут Вместо использования атрибута AFAIK, Я не знаю, есть ли у вас контроль над элементами, но, вероятно, вам следует дать им одинаковые имена и использовать Другим решением будет перебор имен и использование Это невозможно. Я предполагаю, что остальные элементы, которые вас интересуют, это Необходимо вручную создать список соответствующих элементов. Если вы решите в любом случае использовать атрибут AFAIK, Я не знаю, есть ли у вас какой-либо контроль над элементами, но, вероятно, вы должны дать им одно и то же имя и использовать Другим решением может быть циклический переход по именам и использование Нет, необходимо выбрать все релевантные элементы, например, с помощью метода Может быть, вы можете обойти с помощью Вы говорите, что вы не можете использовать JQuery, и я уверен, что у вас есть хорошая причина для этого, но вещи, как это то, для чего Рамки есть. Можно ли использовать Prototype или MooTools? s. Если это так, то вы должны знать, что атрибут name
не действителен для элементов .
name
(вместо того, чтобы, скажем, добавить класс в атрибуте class
), подойдет что-то вроде следующего:var table = document.getElementById("your_table_id");
var tds = table.getElementsByTagName("td");
var matchingTds = [];
for (var i = 0, len = tds.length, td, tdName; i < len; ++i) {
td = tds[i];
tdName = td.getAttribute("name");
if (tdName && tdName.indexOf("tdName_") == 0) {
matchingTds.push(td);
}
}
getElementsByClassName
, но вы можете использовать JQuery для спасения: $('td[name=tdName_1]') // matches exactly 'tdName_1'
$('td[name^=tdName]') // matches those that begin with 'tdName'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript"><!--
function find(){
var inputs = document.getElementById("foo").getElementsByTagName("input");
var found = [];
for(var i=0, len=inputs.length; i<len; i++){
if(inputs[i].name.match(/^tdName_\d+$/)){
found.push(inputs[i]);
}
}
alert(found.length + " elements found");
}
//--></script>
</head>
<body>
<form action="" method="post" id="foo">
<input type="text" name="tdName_1">
<input type="text" name="tdName_2">
<input type="text" name="tdName_3">
<input type="text" name="not_me">
<input type="text" name="tdName_4">
<input type="text" name="neither_me">
<input type="text" name="tdName_5">
<input type="button" onclick="find()" value="Find">
</form>
</body>
</html>
name
недействителен для элементов
. Он все равно должен работать, если вы решите его использовать. Один из вариантов - использовать цикл while, например:
function getAllNamedTDs ()
{
var cTD, i=1, elArr = [];
// If an element with "tdName_"+i is not found, exit the loop
while (cTD = document.getElementByName("tdName_"+(i++)))
elArr.push(cTD);
// return the array of elements or null if no elements were found.
return elArr.length ? elArr : null;
}
name
вы должны использовать атрибут id
, а затем заменить getElementByName
с getElementById
getElementsByName
требует статическую строку в качестве аргумента. getElementsByName
. getElementByName('tdName_' + i)
.
< td >
s. Если да, следует иметь в виду, что атрибут name
недопустим для элементов < td >
. name
(вместо, скажем, добавления класса в атрибут class
), то будет работать что-то подобное:
-121--3329680- var table = document.getElementById("your_table_id");
var tds = table.getElementsByTagName("td");
var matchingTds = [];
for (var i = 0, len = tds.length, td, tdName; i < len; ++i) {
td = tds[i];
tdName = td.getAttribute("name");
if (tdName && tdName.indexOf("tdName_") == 0) {
matchingTds.push(td);
}
}
getElemiveStartName
требует статического ряда в качестве аргумента. getElemiceStartName
. getElireStartName ('tdName _' + i)
. getElemiceStartTagName
, и выполнить их циклическую выборку до тех пор, пока не будет найден один или несколько элементов, соответствующих заданным критериям. getElemityByClassName
и дать каждый элемент, который вы хотите сопоставить с определенным классом? (Обновление, родная версия не доступна на SO, спасибо Энди Э. Это очень популярное обходное решение реализации.)
Похожие вопросы: