The get()
method returns DOM object so attr()
method doesn't work with it. To get jQuery object use eq()
method and apply attr()
method on that.
$(function() {
getUserName();
});
function getUserName() {
var o = $('div.YoutubePlaylist').length;
for (var i = 0; i < o; i++) {
console.log($("div.YoutubePlaylist").eq(i).attr('data-username'));
// ---^^^^^----
console.log($("div.YoutubePlaylist").eq(i).attr('data-playlist'));
// ---^^^^^----
}
};
$(function() {
getUserName();
});
function getUserName() {
var o = $('div.YoutubePlaylist').length;
for (var i = 0; i < o; i++) {
console.log($("div.YoutubePlaylist").eq(i).attr('data-username'));
console.log($("div.YoutubePlaylist").eq(i).attr('data-playlist'));
}
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="myYoutubePlaylist">
<div class="YoutubePlaylist" data-username="Username1" data-playlist="PlaylistID1" style="height: 20px; width; 20px; background-color: red;"></div>
<div class="YoutubePlaylist" data-username="Username2" data-playlist="PlaylistID2" style="height: 20px; width; 20px; background-color: blue;"></div>
<div class="YoutubePlaylist" data-username="Username3" data-playlist="PlaylistID3" style="height: 20px; width; 20px; background-color: green;"></div>
</div>
In the above code, you can make some modification for better performance(caching reference, using data()
method etc).
$(function() {
var $o = $('div.YoutubePlaylist'); // cache the refernece
for (var i = 0; i < $o.length; i++) {
console.log($o.eq(i).data('username')); // get data atribute value
console.log($o.eq(i).data('playlist'));
}
});
$(function() {
var $o = $('div.YoutubePlaylist');
for (var i = 0; i < $o.length; i++) {
console.log($o.eq(i).data('username'));
console.log($o.eq(i).data('playlist'));
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="myYoutubePlaylist">
<div class="YoutubePlaylist" data-username="Username1" data-playlist="PlaylistID1" style="height: 20px; width; 20px; background-color: red;"></div>
<div class="YoutubePlaylist" data-username="Username2" data-playlist="PlaylistID2" style="height: 20px; width; 20px; background-color: blue;"></div>
<div class="YoutubePlaylist" data-username="Username3" data-playlist="PlaylistID3" style="height: 20px; width; 20px; background-color: green;"></div>
</div>
You can simplify the code by using jQuery each()
method, which helps to iterate over jQuery element collection.
$(function() {
$('div.YoutubePlaylist').each(function() {
console.log($(this).attr('data-username'));
// or use
// console.log($(this).data('username'));
// console.log(this.dataset['username'])
console.log($(this).attr('data-playlist'));
// or use
// console.log($(this).data('playlist'));
// console.log(this.dataset['playlist'])
})
});
$(function() {
$('div.YoutubePlaylist').each(function() {
console.log($(this).attr('data-username'));
// or use
// console.log($(this).data('username'));
// console.log(this.dataset['username'])
console.log($(this).attr('data-playlist'));
// or use
// console.log($(this).data('playlist'));
// console.log(this.dataset['playlist'])
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="myYoutubePlaylist">
<div class="YoutubePlaylist" data-username="Username1" data-playlist="PlaylistID1" style="height: 20px; width; 20px; background-color: red;"></div>
<div class="YoutubePlaylist" data-username="Username2" data-playlist="PlaylistID2" style="height: 20px; width; 20px; background-color: blue;"></div>
<div class="YoutubePlaylist" data-username="Username3" data-playlist="PlaylistID3" style="height: 20px; width; 20px; background-color: green;"></div>
</div>