jQuery - Exercise
Find the flags
by cmckeachie
HTML
<div id="container">
<h1>Find the flag elements.</h1>
<p>There are three flags ("FLAG") in the content below. Find them and move their containing elements into the #bucket element.</p>
<div class="main">
<ul>
<li>One</li>
<li>FLAG #1</li>
<li>Three</li>
</ul>
<div id="articles">
<article class="new">
<h3>Article 1</h3>
<p>This is <a href="#">some</a> body content</p>
<p>This is some body content <a class="flag" href="#">FLAG 2</a>
</p>
</article>
<article class="new">
<h3>Article 2</h3>
<p>This is some body content</p>
</article>
<article>
<h3>Article 3</h3>
<p>This is some body content</p>
</article>
<div class="footer">
<div>
<div>
<div></div>
<div>
<div>FLAG 3</div>
<div></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="bucket">
<h2>Dropped Flags:</h2>
<!-- Where are my flags? -->
</div>
</div>
CSS
body{
font-size:.7em;
}
#bucket {
position:absolute;
top:5px;
right:5px;
border:2px solid #ccc;
border-radius:2px;
border-top:0;
background-color:#ececec;
width:20%;
font-size:8px;
}
#bucket::before {
content:"Bucket";
}
#bucket a,
#bucket div,
#bucket li{
display:block;
color:red;
}
JavaScript
// Hunting flags in the Document
//
// Using jQuery
//
// Find the three flags (they have "FLAG" text inside them)
// and move their containing elements into the #bucket
//
// Hint: Expect to use
// $(selector)
// .append()
// .prepend()
// Note: I'm wrapping this in the DOM on-ready event for you
// So that it runs AFTER the page is loaded and ready
$(document).ready(function() {
var flags = [];
var flag1 = $("div.main > ul > li:nth-child(2)");
flags.push(flag1);
var flag2 = $(".flag");
flags.push(flag2);
var flag3 = $(".footer div:contains('FLAG')");
flags.push(flag3);
var bucket = $("#bucket");
$.each( flags, function(i,flag){
bucket.append( flag );
});
});
// bonus: write a function to crawl the entire document and search for the "FLAG" text, and do the job for you.