0

I have page where it's possible to create number of identical rows containing some search criteria fields. I did it creating template div which is populated when user press addButton. In my js function I'm replacing then id and name with correct values and adding right order number, like 1,2,3 etc. The function works fine under FireFox, Chrome and Safari. But it fails under IE without any warning.

    var $rowtp = $('div#partnerFactory-template')
            .html()
            .replace(/id="__prefix__/g, "id=\"truckSearcherFilter_partnerFactoryRow")
            .replace(/name="__prefix__/g, "name=\"truckSearcherFilter.partnerFactoryRow");

var $nrow = $('div#partnerFactory-list').append($rowtp) 

This is correct Firefox result after replaicing

<input id="truckSearcherFilter_partnerFactoryRow_0__partnerName" class="ui-corner-all ui-widget-content ui-autocomplete-input" type="text" value="" name="truckSearcherFilter.partnerFactoryRow[0].partnerName" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true">    

and this is what I can see in IE

<INPUT id=__prefix___0__partnerName class="ui-corner-all ui-widget-content" type=text name=__prefix__[0].partnerName jQuery17206032578406930051="64">

Anybody can see what I'm doing wrong ?

Regards Jan

4

1 に答える 1

0

innerHTML(またはこの場合.html())が吐き出すかに依存するのは悪い考えです。DOCTYPE出力から、内部的にIEが1語の属性を引用符で囲んでいないことがわかります(これは、クァークズモードの動作であるため、わざわざ追加しなかったことを示している可能性があります)。

onClickインライン属性からパラメーターを解析しようとしたときに、Firefoxで同様の問題が発生しました。他の人々は、を解析しようとして、実際に取得するときにgetComputedStyle().color期待することに問題があります。#RRGGBBrgb(R,G,B)

解決策は次のとおりです。

var clone = document.getElementById('partnerFactory-template').cloneNode(true),
    inputs = clone.getElementsByTagName('input'), l = inputs.length, i,
    target = document.getElementById('partnerFactory-list');
for(i=0; i<l; i++) {
    inputs[i].name = inputs[i].name.replace("__prefix__","truckSearcherFilter_partnerFactoryRow");
    inputs[i].id = inputs[i].id.replace("__prefix__","truckSearcherFilter_partnerFactoryRow");
}
while(clone.firstChild) target.appendChild(clone.firstChild);

jQueryがないため、パフォーマンスが大幅に向上することに注意してください。どういたしまして ;)

于 2013-01-27T19:16:50.887 に答える