Poiché si sta chiedendo di creare un elemento dalla sintassi css, è necessario utilizzare un parser per interpretare la sintassi.
Ecco un esempio da cui è possibile creare. Questo corrisponderà al nome di un elemento seguito da id, classe o altri attributi. Non coprirà alcuni casi limite, ma funzionerà nella maggior parte dei casi.
var elem_regex = /^(\w+)?|(#|\.)([^.#\[]+)|(\[[^\]]+?\])/g
Quindi creare una funzione per ottenere le parti e creare un elemento.
function elementFromSelector(str) {
var match, parts = {}, quote_re = /^("|').+(\1)$/;
while (match = elem_regex.exec(str)) {
if (match[1])
parts.name = match[1];
else if (match[2] === ".") {
if (!parts.clss)
parts.clss = [];
parts.clss.push(match[3]);
} else if (match[2] === "#")
parts.id = match[3];
else if (match[4]) {
var attr_parts = match[4].slice(1,-1).split("="),
val = attr_parts.slice(1).join("");
parts[attr_parts[0]] = quote_re.test(val) ? val.slice(1,-1) : val;
}
else throw "Unknown match";
}
if (parts.name) {
var elem = document.createElement(parts.name);
delete parts.name;
for (var p in parts)
if (p === "clss")
elem.className = parts[p].join(" ");
else
elem[p] = parts[p];
return elem;
} else throw "No element name at beginning of string";
}
Quindi passare una stringa corretta alla funzione e restituirà l'elemento.
var str = 'input#the_id.firstClass.secondClass[type="text"][value="aValue"]';
var element = elementFromSelector(str);
Prima di creare l'elemento, le parti appaiono così.
{
"name": "input",
"id": "the_id",
"clss": [
"firstClass",
"secondClass"
],
"type": "text",
"value": "aValue"
}
Quindi utilizza tali informazioni per creare l'elemento che viene restituito.
fonte
2012-08-27 15:11:40
quindi .. fondamentalmente vuoi un'implementazione [zen coding] (http://code.google.com/p/zen-coding/) in javascript? –