其實我需要這種處理用更簡單的方式「選項」的元素,更簡單的正則表達式。即使使用innerHTML = append content
代替select
元素,ie的Cos也不會附加。追加操作在下面的鏈接中提到,但不適用於選項元素。而且我發現這個問題的解決方案。如果附加內容是選項或選項,則使用handleOptionElements
,如果不使用asyncInnerHTML
。
function append(el, child) {
if (child.nodeType === 1 || child.nodeType === 3) {
// Without clone, removes element if it is copied from document
return el.appendChild(child.cloneNode(true));
}
content = trim(content);
if (content.substring(0, 7) === "<option" &&
content.substring(content.length - 7) === "option>") {
handleOptionElements(content, el);
} else {
el.innerHTML = content;
}
return el;
}
http://james.padolsey.com/javascript/asynchronous-innerhtml/
Ways to increase performance when set big value to innerHTML
var re_standaloneAttributes = /^(select|disabl)ed$/i,
re_optionSearch = /<option\s*([^>]*)>(.*?)<\/option>/gi,
re_attributeSearch = /([^\s]*)=["'](.*?)["']|([\w\-]+)/g;
function handleOptionElements(content, targetElement) {
var options = [], attributes = [],
optionElement, optionElements = [], createOption;
(""+ content).replace(re_optionSearch, function(src1, attr, text) {
if (!src1) return;
(""+ attr).replace(re_attributeSearch, function(src2, name, value) {
if (!src2) return;
name = name || src2;
value = value || (value = re_standaloneAttributes.test(name) ? name : "");
attributes.push({name: name, value: value});
});
options.push({text: text || "", attributes: attributes});
// Reset attributes for each element
attributes = [];
});
createOption = (function() {
var option = document.createElement("option");
return function() { return option.cloneNode(true) };
})();
forEach(options, function(option) {
optionElement = createOption();
// optionElement.text doesn't work on ie 7-8
optionElement.textContent = optionElement.innerText = option.text;
forEach(option.attributes, function(attribute) {
optionElement.setAttribute(attribute.name, attribute.value);
});
if (targetElement !== undefined) {
targetElement.appendChild(optionElement);
} else {
optionElements.push(optionElement);
}
});
return optionElements;
}
我不知道你需要它,但它會爲你工作,試圖像'document.querySelector選擇(「選項[值=」 1 '] [數據 - 富=' 富'] [只讀]「)。outerHTML'? – EricG
我需要,如果str有任何attr,從str或null獲取所有attrs。 –
我想我沒有得到你的輸入和期望的輸出。 – EricG