显然,这是一个通用的例子,我将不得不适应一般情况。
我想删除没有ID或类的DOM元素。我可以使用很多方法,但我想知道如果我可以不添加类(例如),如果JQuery可以做这种匹配。
做错了什么,或者是不是可能?
由于
很抱歉这个问题的第一个版本,我覆盖了div结果
$newTest
中的结果是它没有删除$last
,即最后一段。
$(document).ready(function() {
var $last = $('#test').children().last(); // Get a generic element
var $newTest = $('#test').clone(); // Clone my DOM elements
$newTest.find($last).remove();
// Find and remove the element!
// This does not work!
$('#result').html($newTest.html() + '<hr>' + $last.html());
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test">
<p>freddy</p>
<p>fred</p>
<p>freddyx</p>
<p>freddy</p>
</div>
<hr>
<div id="result">
</div>
答案 0 :(得分:2)
我认为您尝试做的事情的问题在于.clone()
描述:创建匹配元素集的深层副本。
此处的关键词是深层复制,这意味着$newTest
中的所有内容都与#test
不同。 AFAIK,这意味着您在$last
中找不到作为指针保存的变量$newTest
。 $last
元素在那里不存在。
潜在解决方案?
我不知道这是否适用于您的用例,但由于您已经有一些任意选择器,您可以保存该选择器并使用eval()
将该选择器应用于克隆对象:< / p>
$(document).ready(function() {
var $last = $($('#test').children().last()); // Get a generic element
var selector = '.children().last()';
var $newTest = $('#test').clone(); // Clone my DOM elements
$newTest.find(eval('$newTest' + selector)).remove();
// Find and remove the element!
// This does not work, $newTest is empty!
$('#result').html($newTest);
$('#result2').html('<hr>' + $last.html());
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test">
<p>freddy</p>
<p>fred</p>
<p>freddyx</p>
<p>freddy</p>
</div>
<hr>
<div id="result">
</div>
<hr>
<div id="result2">
</div>
&#13;