2013-09-10 45 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