要素の上に表示される "p"タグのようなタグの最初の出現を削除したいと思います。このタグはすぐ上にある(前の兄弟)か、親の前の兄弟である可能性があります。私はjQueryでこれをやりたいと思いますjQueryでタグを削除する
<p>..</p>
<span>abcd</span>
<p>..</p>
<div>
<span>abcd</span>
私はスパンの観点からpタグを削除したいと思います。
要素の上に表示される "p"タグのようなタグの最初の出現を削除したいと思います。このタグはすぐ上にある(前の兄弟)か、親の前の兄弟である可能性があります。私はjQueryでこれをやりたいと思いますjQueryでタグを削除する
<p>..</p>
<span>abcd</span>
<p>..</p>
<div>
<span>abcd</span>
私はスパンの観点からpタグを削除したいと思います。
.prevAll()
methodと.first()
を一緒に使用して、要素に最も近い前の<p>
兄弟を見つけることができます。結果が空でないjQueryオブジェクトの場合は、(明らかに)一致しているので、それを削除します。
結果が空のjQueryオブジェクトである場合、一致する兄弟は存在しないため、現在のスパンの親から始めて、ループを使用して必要な限りツリーを上に移動してください。
(あなたが唯一、代わりにprevAll("p").first()
の.prev("p")
を使用する要素の即時兄弟をテストする場合。)
$("span").click(function() {
// not sure how you're getting a reference to the starting span element,
// but assuming for demonstration purposes it is 'this' in an event handler
var current = $(this);
var prev;
while (!current.is("body")) {
prev = current.prevAll("p").first();
if (prev.length > 0) {
prev.remove();
break;
}
current = current.parent();
}
});
div { border: thin black solid; margin: 2px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<span>abcd</span>
<p>..</p>
<span>abcd</span>
<p>..</p>
<div>
<span>abcd</span>
</div>
<div>
<p>..</p>
<div>a div</div>
<span>abcd</span>
</div>
<p>..</p>
<div>
<div>
<div>
<div>
<span>abcd</span>
</div>
</div>
</div>
</div>
great !完璧なソリューション。 – snit80
私はこのデモは、あなたが探しているものであるかどうかわからないんだけど、これは多分場合:
あなたがループにすべてp
のタグを持っていると確認し、それがnext()
兄弟を持っている場合、それを削除し、ループを壊す。私はあなたが親がspan
上記のいずれかのレベルができspan
タグの親の前の兄弟であるp
タグを削除したい理解
// loop all p's
$('p').each(function(ndx, elem) {
// if element has a next sibling
if ($(elem).next().length > 0) {
\t console.log('removed :', $(elem).text());
\t $(elem).remove(); // remove this <p> tag
\t return false; // break out of loop
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>first p of body</p>
<div class="container">
<p>first p of container div</p>
<span>abcd</span>
</div>
<p>second p of body</p>
<span>abcd</span>
<p>third p of body</p>
<div>
<span>abcd</span>
これは私が望むものではありません、実際には特定のスパンの兄弟姉妹かスパンのアンサーに兄弟の兄弟であれば実際にpを削除する必要があります – snit80
:
このDEMOを参照してください。
チェックこのスクリプト:
function isPTag($el) {
return $el.prop("tagName").toUpperCase() === 'P';
}
function removeIfPTag($el) {
if ($el.length > 0 && isPTag($el)) {
$el.remove();
return true;
}
return false;
}
function removeClosePTag($el) {
function removePrevious($el) {
var previous = $el.prevAll();
for (var j = 0; j < previous.length; j += 1) {
current = $(previous[j]);
if (removeIfPTag(current)) {
return true;
}
}
}
// Finds `p` in previous elements relative `span`
if (removePrevious($el)) {
return true;
}
var parents = $el.parents();
for (var i = 0; i < parents.length; i += 1) {
var current = $(parents[i]);
if (removeIfPTag(current)) {
return true;
}
// Finds `p` in previous elements relative to `current` (one of span's parents)
if (removePrevious(current)) {
return true;
}
}
return false;
}
console.log(removeClosePTag($('#first-span')));
console.log(removeClosePTag($('#second-span')));
console.log(removeClosePTag($('#third-span')));
console.log(removeClosePTag($('#fourth-span')));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<p>first p (should remain)</p>
<p>second p (should delete)</p>
<div>
<span id="first-span">first span</span>
</div>
</div>
<div>
<span id="second-span">second span</span>
<p>(should remain)</p>
</div>
<div>
<p>third p (should delete)</p>
<span id="third-span">first span</span>
</div>
<div>
<div>
<p>fourth p (should remain)</p>
</div>
<span id="fourth-span">fourth span</span>
</div>
第4pが、それは#fourth-span
上だにもかかわらず、削除されていないか注意してください。それを削除したい場合は、最初のspan
要素の上のDOMツリー全体を調べなければならないでしょう。この要素はCPUには高価であり、ブラウザを簡単にハングさせる可能性があります。
構造は常に同じであるのか?前の要素の1つ、または親の前の要素の1つ。 – Dekel
ナー、それは祖父母の兄弟またはさらに高いかもしれませんが、私は私が作業している要素の上にある最初のpタグを削除する必要があります。 – snit80
私はここにクイックソリューションがあるかどうかわかりません... – Dekel