通过javascript查找字符串的一部分
我有下面的HTML复选框通过javascript查找字符串的一部分,javascript,html,regex,Javascript,Html,Regex,我有下面的HTML复选框 <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"/> 目标是从style属性中获取tabindex的值,然后将其正确分配给元素。更新的答案: 请回复您的评论: 我知
<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"/>
目标是从
style
属性中获取tabindex
的值,然后将其正确分配给元素。更新的答案:
请回复您的评论:
我知道它放错地方了,但我无法手动移动它
好吧,这就是为什么我们要用正则表达式,明白了
因此,我们有两项任务:
style
属性的文本,这在IE8上应该很容易,但却非常困难选项卡index
的值element.getAttribute(“style”)
为您提供了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;
}
当然,这给我们的不仅仅是样式文本,但它已经足够接近了。我们仍然没有尝试(虽然我们用outerHTML
稍微推动它,但是它在输入上,所以包含得很好),我们在有限的字符串中寻找有限的东西
现在,从该文本中我们需要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(“样式”);
如果(文本类型!=“字符串”){
//糟糕!糟糕!
text=element.outerHTML;
}
var match=/\btabindex\s*:\s*(\d+)/i.exec(文本);
var索引=匹配和匹配[1];
如果(索引){
setAttribute(“tabindex”,index);
}
警报(“索引:+(索引| |未知”)代码>
永远不要用正则表达式解析HTML元素。看
如果您有一个HTML元素,您可以通过.getAttribute
访问它的所有属性,或者在CSS样式属性的情况下使用.style.top
作为top
属性
本例中的问题可能是将tabindex
属性放置在style属性中。根据,您应该将其设置为单独的属性,以便以后可以通过
document.getElementById("1").getAttribute("tabindex");
首先,应该使用getElementById,这在复杂场景中更合适。
如果要访问属性的原始字符串值,可以使用:
document.getElementById("1").getAttribute("style")
然后根据需要处理它(使用搜索、substr等)为什么要使用字符串操作,而不是使用DOM中的元素?为什么不使用DOM?我不知道怎么做。选项卡索引设置在另一个位置,出于某种原因,该位置将其放置在样式部分。因为这不是有效的CSS,所以被忽略。我需要获取该值并将其放入适当的HTML元素中TabIndex@Sean:给你。适用于IE8,甚至适用于内部网站。我很高兴IE现在好多了。:-)非常感谢。但是,如果我将第一行更改为document.getElementsByTagName(“输入”),上述操作是否仍然有效代码>@Sean:这会给你一个列表。您必须在列表中循环(它有一个length
属性,您可以像数组一样索引它,从0开始,以获取每个元素)。但是,如果对每个元素都这样做,当然,它会起作用。@Sean:Enh,我继续添加了一个循环示例。:-)
document.getElementById("1").getAttribute("style")