更新答案:
你的评论:
我知道它在错误的位置,但我无法手动移动它。
好的,这就是我们使用正则表达式的原因,明白了。
所以我们这里有两个任务:
获取style属性的文本,这应该很容易,但在IE8上却非常困难。
从该文本中获取tabindex 的值。
首先,获取样式属性文本:不幸的是,默认情况下,IE8 将在名称错误的“兼容性视图”中显示“内联网”站点。 (即:兼容旧的损坏的 IE7 和更早版本,不兼容,你知道,标准。) IE7 和更早版本有一个可怕的错误:element.getAttribute("style") 给你style 对象,而不是样式属性文本;与element.style 获得的对象相同。虽然他们在 IE8 中修复了这个问题,但在兼容性视图中它被破坏了(要......“兼容”)。
所以这个:
var text = element.getAttribute("style"):
...在任何体面的浏览器上给我们一个字符串,在不兼容视图时在 IE8 上给我们一个字符串,但在兼容性视图时给我们一个对象。
所以要获得文本,我们必须在别处寻找。幸运的是,微软是 innerHTML 和 outerHTML 的先驱,所以我们可以这样做:
var text = element.getAttribute("style"):
if (typeof text !== "string") {
text = element.outerHTML;
}
当然,这不仅为我们提供了样式文本,而且已经足够接近。我们仍然没有尝试parse HTML with regex(尽管我们正在用outerHTML 推动它,但它在input 上并且相当包含),我们正在寻找有限字符串中的有限事物。 .
现在,从该文本中,我们需要 tabindex 值:此表达式匹配 tabIndex(不区分大小写)后跟任何空格,后跟 :,后跟空格,后跟一些数字,我们捕获:
/\btabindex\s*:\s*(\d+)/i
然后我们可以使用捕获组从不正确的位置获取值并将其设置在正确的位置:
var element = document.getElementById("1");
var text = element.getAttribute("style");
if (typeof text !== "string") {
// Bad IE! Bad!
text = element.outerHTML;
}
var match = /\btabindex\s*:\s*(\d+)/i.exec(text);
var index = match && match[1];
if (index) {
element.setAttribute("tabindex", index);
}
alert("Index: " + (index || "unknown"));
实例:
var element = document.getElementById("1");
var text = element.getAttribute("style");
if (typeof text !== "string") {
// Bad IE! Bad!
text = element.outerHTML;
}
var match = /\btabindex\s*:\s*(\d+)/i.exec(text);
var index = match && match[1];
if (index) {
element.setAttribute("tabindex", index);
}
alert("Index: " + (index || "unknown"));
<input name="1" title="" id="1" style="position: absolute; top: 333px; left: 760px; tabindex: 11; z-order: 99;" type="checkbox" CHECKED="checked" runat="server" value="on"/>
你的评论:
但是如果我将第一行更改为document.getElementsByTagName("input");,上述方法仍然有效
当然,你只是循环执行:
var list, index, element, text, match;
list = document.getElementsByTagName("input");
for (index = 0; index < list.length; ++index) {
element = list[index];
text = element.getAttribute("style");
if (typeof text !== "string") {
// Bad IE! Bad!
text = element.outerHTML;
}
match = /\btabindex\s*:\s*(\d+)/i.exec(text);
tabindex = match && match[1];
if (tabindex) {
element.setAttribute("tabindex", tabindex);
}
}
(我在那里将 tabindex 称为 tabindex,因为循环索引经常被称为 index。)
原答案:
您的tabIndex 放错了位置:它不是样式属性,而是独立属性:
<input name="1" title="" id="1" tabindex="11" style="position: absolute; top: 333px; left: 760px; z-order: 99;" type="checkbox" CHECKED="checked" runat="server" value="on"/>
<!-- Here ----------------------^ -->
然后使用tabIndex反射属性:
var index = document.getElementById("1").tabIndex;
实例:
alert(document.getElementById("1").tabIndex);
<input name="1" title="" id="1" tabindex="11" style="position: absolute; top: 333px; left: 760px; z-order: 99;" type="checkbox" CHECKED="checked" runat="server" value="on"/>
旁注:虽然在 HTML 中有效,但以数字开头的 id 值很难在 CSS 中使用;最好避开它们。