通过javascript查找字符串的一部分

通过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的值,然后将其正确分配给元素。更新的答案: 请回复您的评论: 我知

我有下面的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
的值,然后将其正确分配给元素。

更新的答案

请回复您的评论:

我知道它放错地方了,但我无法手动移动它

好吧,这就是为什么我们要用正则表达式,明白了

因此,我们有两项任务:

  • 获取
    style
    属性的文本,这在IE8上应该很容易,但却非常困难

  • 从该文本中获取
    选项卡index
    的值

  • 首先,获取样式属性文本:不幸的是,默认情况下IE8将在名称错误得可笑的“兼容性视图”中显示“intranet”站点。(也就是说:与旧的损坏的IE7和早期版本兼容,与标准不兼容。)IE7和早期版本有一个可怕的错误:
    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")