追加するテーブル セル自体が DOM 内にある場合、それは機能するはずです。(したがって、この回答を削除する必要があるかもしれません。もともとは廃止されたと思っdocument.getElementsByName
ていましたが、間違っていました)。を使用した例を次に示しgetElementsByName
ます。
ライブコピー| ライブソース
(function() {
// Get the target
var target = document.getElementById("target");
// Dynamically add content
target.innerHTML =
'<div name="special">special 1</div>' +
'<div name="special">special 2</div>' +
'<div name="special">special 3</div>';
// Get those elements
var list = document.getElementsByName("special");
// Prove we got them
var p = document.createElement('p');
p.innerHTML = "Found " + list.length + " 'special' elements";
document.body.appendChild(p);
})();
もちろん、これは の関数であるため、表のセルに追加した要素だけでなく、 を含むすべての要素document
が検索されます。name="special"
name
要素が属性を持つことが許可されていない場合、上記はIEでは機能しません。たとえば、 を探すとしgetElementsByName("special")
ます。は要素の有効な属性ではないため、無視さ<div name="special">
れますが、検索されます。詳細については、この MSDN 記事 を参照してください。さらに悪いことに、IE は一致する要素を含めますが、もちろん. はぁ<input name="special">
name
div
id
name
IE7 以前をサポートする必要がない限り (たとえば、中国向けに開発している場合を除き)、Element#querySelectorAll
selectorを使用できます'[name="special"]'
。そのname
属性を使用する要素の要素内のみを検索します。
例:ライブコピー| ライブソース
(function() {
// Get the target
var target = document.getElementById("target");
// Dynamically add content
target.innerHTML =
'<div name="special">special 1</div>' +
'<div name="special">special 2</div>' +
'<div name="special">special 3</div>';
// Get those elements
var list = target.querySelectorAll('[name="special"]');
// Prove we got them
var p = document.createElement('p');
p.innerHTML = "Found " + list.length + " 'special' elements";
document.body.appendChild(p);
})();
IE7 以前をサポートする必要がある場合は、この他のスタック オーバーフローの質問とそれに対する私の回答を参照してください。質問は、への追加に関するこの記事を指しており、質問に対する私の答えは、要素固有のレベルでそれをエミュレートする方法について述べています。querySelectorAll
document
その記事のコードを、他の質問に対する私の回答と上記の例と組み合わせると、次のようになります。
ライブコピー| ライブソース
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div id="target"></div>
<script>
(function() {
// IE7 support for querySelectorAll. Supports multiple / grouped selectors and the attribute selector with a "for" attribute. http://www.codecouch.com/
if (!document.querySelectorAll) {
(function(d, s) {
d=document, s=d.createStyleSheet();
d.querySelectorAll = function(r, c, i, j, a) {
a=d.all, c=[], r = r.replace(/\[for\b/gi, '[htmlFor').split(',');
for (i=r.length; i--;) {
s.addRule(r[i], 'k:v');
for (j=a.length; j--;) a[j].currentStyle.k && c.push(a[j]);
s.removeRule(0);
}
return c;
}
})();
}
var qsaWorker = (function() {
var idAllocator = 10000;
function qsaWorkerShim(element, selector) {
var needsID = element.id === "";
if (needsID) {
++idAllocator;
element.id = "__qsa" + idAllocator;
}
try {
return document.querySelectorAll("#" + element.id + " " + selector);
}
finally {
if (needsID) {
element.id = "";
}
}
}
function qsaWorkerWrap(element, selector) {
return element.querySelectorAll(selector);
}
// Return the one this browser wants to use
return document.createElement('div').querySelectorAll ? qsaWorkerWrap : qsaWorkerShim;
})();
// Get the target
var target = document.getElementById("target");
// Dynamically add content
target.innerHTML =
'<div name="special">special 1</div>' +
'<div name="special">special 2</div>' +
'<div name="special">special 3</div>';
// Get those elements
var list = qsaWorker(target, '[name="special"]');
// Prove we got them
var p = document.createElement('p');
p.innerHTML = "Found " + list.length + " 'special' elements";
document.body.appendChild(p);
})();
</script>
</body>
</html>
IE7で動作します。