从jQuery选择器创建DOM元素

M M*_*ler 5 jquery dom selector

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

例如:

$.create('#hello').insertAfter('#test');
Run Code Online (Sandbox Code Playgroud)

会生成以下内容:

<div id="test">This element already existed in the DOM.</div>
<div id="hello"></div>
Run Code Online (Sandbox Code Playgroud)

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

$.create('#test.a.b');
Run Code Online (Sandbox Code Playgroud)

对于:

<div id="test" class="a b"></div>
Run Code Online (Sandbox Code Playgroud)

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

有人知道解决方案吗?

谢谢.

The*_*art 5

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

尝试

$('<div id="hello"></div>').appendTo('body');
Run Code Online (Sandbox Code Playgroud)

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

$('<div id="test" class="a b"></div>').appendTo('body');
Run Code Online (Sandbox Code Playgroud)

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

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

最好使用一个函数:

function createElement(el, target) {
   $(el).appendTo(target);
}
Run Code Online (Sandbox Code Playgroud)

使用如下功能:

createElement('<div id="test" class="a b"></div>', 'body');
Run Code Online (Sandbox Code Playgroud)

您还可以将新创建​​的元素追加到任何其他目标而不是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
Run Code Online (Sandbox Code Playgroud)

DEMO


小智 5

我实际上创建了一个较早的版本,但仍然有些漏洞,但是可以像您想的那样使用,就像

$.jseldom('#test.a.b')
Run Code Online (Sandbox Code Playgroud)

您甚至可以将其与同级选择器一起使用

$.jseldom('#test #abc .child +.sibling-of-child')
Run Code Online (Sandbox Code Playgroud)

https://github.com/shekhei/jseldom

如果您觉得有用,请使用它,并在此报告所有问题:PI确实希望将其做成对人们有利的事情:)