Zaujímalo by ma, ako by som mohol použiť prvok, ktorý som skontroloval pomocou .has () pomocou jQuery.
Toto som dosiaľ
HTML
<div>
<!--Only this paragraph should have a red background -->
<p>This is a paragraph</p>
<h1>This is not a paragraph</h1>
</div>
<div>
<h1>This is not a paragraph</h1>
</div>
jQuery
$("div").has("p").addClass("para");
Ako vidíte, pýtam sa, či má moja div <p>
a ak áno, pridať triedu. Mojím zámerom bolo pridať triedu do odseku, ale zdá sa, že trieda je pridaná do môjho oddielu. Ako môžem pridať triedu do mojej <p>
po použití $("div").has("p")
?
Mal by som to dať do if
takéto vyhlásenie
if($("div").has("p")){
{...}.addClass("para");
}
ale ako môžem pridať triedu do mojej <p>
?
mám husle aby to bolo jasné
(Viem, že by som na tento problém mohol použiť .each (), ale chcem vedieť, či je to možné aj s .has ()?)
odpovede:
3 pre odpoveď č. 1jednoducho môžete použiť
$("div p").addClass("para");
1 pre odpoveď č. 2
Aj keď vám odporúčam postupovať podľa návrhu pána Aliens, ak bezpodmienečne musíte použiť .has (), musíte najskôr zvoliť odsek. Keď to napíšeš takto:
$("div").has("p").addClass("para");
Váš vybraný prvok je stále div (y). Ak sa chcete vyhnúť písaniu príkazu If, napíšte šek takto:
$("div").has("p").find("p").addClass("para");
EDIT: Toto skutočne nekontroluje, či div obsahuje odsek, ale vyberie tie, ktoré majú. Výsledok je v podstate rovnaký.
0 pre odpoveď č. 3
if($("div").find("p").length != 0) {
// another way to check if there is a p element inside of a div
$("div").find("p").addClass("para");
}
ALEBO ak nie ste šťasný pomocou toho môžete zmeniť funkciu jQuery na toto
has: function( target ) {
var i,
targets = jQuery( target, this ),
len = targets.length,
has = false;
this.filter(function() {
for ( i = 0; i < len; i++ ) {
if ( jQuery.contains( this, targets[i] ) ) {
has = true;
}
}
});
return has;
},
0 pre odpoveď č. 4
$("div").has("p").find("p").addClass("class_name");
// It will add class on p if div has p element