5

我想知道是否有可能,而不是通过 jQuery 选择器从 DOM 中选择一个元素,如果我可以创建一个。

例如:

$.create('#hello').insertAfter('#test');

将生成以下内容:

<div id="test">This element already existed in the DOM.</div>
<div id="hello"></div>

或者,更好的是,对于更复杂的操作:

$.create('#test.a.b');

为了:

<div id="test" class="a b"></div>

显然,不需要实现更复杂的操作,例如 :selected 或 :nth-child 或 :not() 以及所有这些操作。

有人知道解决方案吗?

谢谢。

4

4 回答 4

6

去创造<div id="hello"></div>

尝试

$('<div id="hello"></div>').appendTo('body');

创建<div id="test" class="a b"></div>

$('<div id="test" class="a b"></div>').appendTo('body');

$('<div id="test" class="a b"></div>')将创建新元素但不会将其添加到 DOM。

要添加该元素,您需要使用append()appendTo()insetAfter()insertBefore()等等。

最好使用函数来:

function createElement(el, target) {
   $(el).appendTo(target);
}

使用如下功能:

createElement('<div id="test" class="a b"></div>', 'body');

您还可以将新创建​​的元素附加到任何其他目标而不是body.

我认为以下功能会对您有所帮助:

function createElement(el, prop, target) {
  var props = prop.split('.'),
      newelement = $(el),
      id = '',
      className = '';
    $.each(props, function(i, val) {
        if(val.indexOf('#') >= 0) {
           id += val.replace(/^#/, '');
        } else {
           className += val + ' ';
        }
    });
    if(id.length) newelement.attr('id', id);
    if(className.length) newelement.attr('class', className.trim());

    $(newelement).html('Newly born').appendTo(target);
}

createElement('div', '#test.a.b', '#con');​ // will work for #test.a.b or, .a.b or, #test.a

演示

于 2012-05-14T15:49:09.100 回答
5

实际上,我之前创建了一个,仍然有点错误,但可以适用于您正在考虑的情况,就像使用它一样

$.jseldom('#test.a.b')

你甚至可以将它与兄弟选择器一起使用

$.jseldom('#test #abc .child +.sibling-of-child')

https://github.com/shekhei/jseldom

如果您觉得它有用,请使用它,并报告那里的所有问题:PI 我真的希望将它变成有益于人们的东西 :)

于 2012-05-23T11:10:17.253 回答
2

我没有看到会从 css 选择器语法创建元素的东西。JQuery 确实允许您创建和添加元素,但语法不像您的示例那样基于 css 选择器。例如,在#test div 之后添加一个带有a 和b 类的#hello div,您可以使用.after():

$('#test').after("<div id='hello' class='a b'>Hello</div>");​​​​​​​​​

jsfiddle:http: //jsfiddle.net/septerr/RmAW6/

或者

$('#test').after('<div>Hello</div>').attr('id', 'hello').addClass('a').addclass('b');​

jsfiddle:http: //jsfiddle.net/septerr/EQjLE/

于 2012-05-14T16:07:11.517 回答
0

只需将html标签插入其中

$("<div id='hello'></div>")

有关更多详细信息,请参见此处 jQuery document.createElement 等效项?

于 2012-05-14T15:49:27.163 回答