通常我会在jQuery中创建一个像$('<div id="errors" class="red"></div>')
我可以使用$.create("div#errors.red")
这样的东西创建一个给定选择器的元素吗?哪里会返回一个jQuery对象,代表div
,其id为errors
,类为red
?
答案 0 :(得分:3)
下面是我编写的一个插件,它允许您创建一个元素,只需用属性装饰它,然后将它附加到DOM。以下是.adorn()
使用您想要执行的操作的示例:
$("<div>").adorn("#errors",".red",">body");
以上内容会在div
和ID
上创建Class
,并将其全部附加到body
。请注意,您可以按任何顺序添加appendTo
语法,因此这也可以使用:
$("<div>").adorn(">body","#errors",".red");
与使用一个连续字符串相反,我发现将每个类,id,值等作为参数传递更容易,因为这清楚地描述了它们。
.blah
- 添加了课程blah
#blah
- 将ID设置为blah
>blah
- 将此附加到blah
h:blah
- 将innerHTML设置为blah
v:blah
- 将值设置为blah
请注意,使用时,冒号可以是任何单个字符,也不必是冒号,因此h-blah
也可以。
这个插件的好处在于它不仅可以用来装饰新创建的元素,还可以用来装饰现有元素。例如,添加3个类并为页面上的所有div设置HTML:
$("div").adorn(".one",".two",".three","h:blah");
最后,如果你不小心传递了错误的标签。 An error class is added to the element 以简化调试,但事情不会中断。
此插件的核心是利用自动提供的 arguments array 来保存所有传入的选项。使用 switch statement 和 substring method 解析选项。
(function( $ ){
jQuery.fn.adorn = function () {
// Get the arguments array for use in the closure
var $arguments = arguments;
// Maintain chainability
return this.each(function () {
var $this = $(this);
$.each($arguments, function(index, value) {
// These are just the options that quickly came
// to mind, you can easily add more.
// Which option is used depends on the first
// character of the argument passed in. The 2nd
// char is sometimes used and sometimes ignored.
switch (value.substring(0,1)) {
case "#":
$this.attr("id",value.substring(1));
break;
case ".":
$this.addClass(value.substring(1));
break;
case ">":
$this.appendTo(value.substring(1));
break;
case "a":
$this.attr("alt", value.substring(2));
break;
case "h":
$this.html(value.substring(2));
break;
case "i":
$this.attr("title", value.substring(2));
break;
case "s":
$this.attr("src", value.substring(2));
break;
case "t":
$this.attr("type", value.substring(2));
break;
case "v":
$this.attr("value", value.substring(2));
break;
default:
// if the wrong key was entered, create
// an error class.
$this.addClass("improper-adorn-label");
}
});
});
};
})( jQuery );
答案 1 :(得分:3)
你的意思是像DOM创建一样的Zen Coding。您可以在zen coding google project page上找到zen编码的语法。
用法是:
var zen = function(input) {
return jQuery(zen_coding.expandAbbreviation(input, 'html', 'xhtml'));
};
var dom = zen('div#id.class');
$('body').append(dom);
答案 2 :(得分:0)
我不认为你能做到这一点,我知道的更接近的事情是你可以做到
var newdiv = $.DIV({ className: "red", id: "errors"});
创建了div,您可以将事件和内容直接附加到变量
使用此插件http://mg.to/2006/02/27/easy-dom-creation-for-jquery-and-prototype
答案 3 :(得分:-2)
您可以尝试以下方法:
$("<div id="errors" class="red"></div>").appendTo("body");