0

我有一个页面,可以在其中创建包含一些搜索条件字段的相同行数。我创建了模板 div,它在用户按下 addButton 时填充。在我的 js 函数中,我将 id 和 name 替换为正确的值并添加正确的订单号,如 1、2、3 等。该函数在 FireFox、Chrome 和 Safari 下运行良好。但它在 IE 下失败,没有任何警告。

    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) 

这是替换后的正确 Firefox 结果

<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">    

这就是我在 IE 中看到的

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

任何人都可以看到我做错了什么?

问候简

4

1 回答 1

0

依赖什么innerHTML(或者在这种情况下,.html())吐出是一个坏主意。您可以从输出中看到,IE 内部不会在一个单词属性周围加上引号(这可能表明您没有费心添加DOCTYPE,因为这是 Quirks 模式的行为)。

onClick当我尝试从内联属性中解析参数时,我在 Firefox 中遇到了类似的问题。其他人在尝试解析时遇到问题,getComputedStyle().color并期望#RRGGBB他们实际得到rgb(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 回答