2013-09-10 50 views
0

一旦我有以下的情况:应用从循环动作来一系列元素,每个元素

甲形式具有内部的系统生成的字段与类“formFieldLabel”(这是用从发电机产生的形式) 。这不是屏幕阅读器友好的,因为它不使用标签标签,我的目标是基本主题,并使这个系统生成的表格更易于访问。所以,我的这个脚本尝试是...

1)通过循环的形式,复制.formFieldLabel内容为阵“labelArray”

2)在此之后,贴上标签内部的相应数组值旁边输入标签标签

3)最后,删除.formFielLabel类,它没有这样做,但是我可以很容易做到这部分

// HTML example for one part of the multiple fields 
<div class="formField"> 
    <table> 
    <tr> 
     <td class="formFieldLabel"       >First Name<b style="color: #FF0000; cursor: default" title="Required Field">*</b></td> 
     <td class="formFieldLabel" style="padding-left: 5px">Last Name<b style="color: #FF0000; cursor: default" title="Required Field">*</b></td> 
    </tr> 
    <tr> 
     <td       ><input type="text" class="l6e formFieldText formFieldMediumLeft" id="form_0004_fld_2_fn" name="First Name" value=""></td> 
     <td style="padding-left: 5px"><input type="text" class="l6e formFieldText formFieldMediumRight" id="form_0004_fld_2_ln" name="Last Name" value=""></td> 
    </tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr> 
     <td class="formFieldLabel">Email Address<b style="color: #FF0000; cursor: default" title="Required Field">*</b></td> 
    </tr> 
    <tr> 
     <td colspan="2"><input type="Email" class="l6e formFieldText formFieldLarge" id="form_0004_fld_2_em" name="E-mail" value=""></td> 
    </tr> 
    </table> 
</div> 

这里的剧本我到目前为止做到这一点。问题是它为每个输入运行整个循环,所以在每个输入旁边显示FirstNameLastNameEmail等等。我觉得我在这里概念上走错了方向。

// jQuery 
var label = $(".formFieldLabel"); 
var labelArray = []; 
for(var i=0;i < label.length; i++) { 
    var arrValue = label[i].innerHTML; 
    labelArray.push(arrValue); 
    insertLabel = $("<label>").append(labelArray[i]).append("</label>"); 
    $(".formFieldText").before(insertLabel); 
}; 

的jsfiddle:http://jsfiddle.net/qGgwT/

任何人都可以点我朝着正确的方向吗?

+0

'$(” ”)'应该是'$(“

+0

主要问题是'$(“.formFieldText”)'目标*所有*字段,而不仅仅是与每个标签相关的字段。你可以使用'$(label [i])。html(insertLabel);'而不是最后一行。此外,还有Arun P Johny建议的选项(非常优雅,但我不确定你会理解代码 - 我不推荐使用你不明白的代码)。 – bfavaretto

回答

1

尝试

var label = $(".formFieldLabel"); 

label.contents().filter(function(){ 
    return this.nodeType == 3 && $.trim($(this).text()).length > 0 ; 
}).wrap('<label />') 

演示:Fiddle

如果你想换行文本和*label然后

$(".formFieldLabel").wrapInner('<label />') 

演示:Fiddle