Swapping divs from each function gets duplicated twice jQuery - javascript

I want to swap 2 divs using jquery but when I tried to swap it using insertAfter() in gets inserted twice. Just want to specify that each parent element needs to only swap the divs once.
So in each parent element wcmsd-step-container I need to insert the wcmsd-checkbox-item-description class below the wcmsd-step-title class. But it gets duplicated twice when swapping it.
Can anyone point what's the right function to use on my jQuery code?
jQuery(document).ready(function() {
jQuery('.wcmsd-step-container').each(function() {
jQuery('.wcmsd-checkbox-item-description').insertAfter(jQuery('.wcmsd-step-title'));
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!--Step 1-->
<div class="wcmsd-step-container">
<h2 class="wcmsd-step-title">What type of photo do you want?</h2>
<div class="wcmsd-step-content">
<label class="wcmsd-checkbox-item-title">choose your photo</label>
<p class="wcmsd-checkbox-item-description">Select up to 122. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan faucibus proin nisi, risus vehicula. Fames metus, metus consectetur.</p>
</div>
</div>
<!--Step 2-->
<div class="wcmsd-step-container">
<h2 class="wcmsd-step-title">What type of video do you want?</h2>
<div class="wcmsd-step-content">
<label class="wcmsd-checkbox-item-title">choose your video</label>
<p class="wcmsd-checkbox-item-description">Select up to 322. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan faucibus proin nisi, risus vehicula. Fames metus, metus consectetur.</p>
</div>
</div>

Your code inside the loop has no relation to the loop, so it's just for (i=0;i<2;++i) with the inner code saying "take all descriptions and put them all after every title" - you get two because there's two, if you had 3, you'd get 3 after each title.
You need to use this inside the loop to ensure the correct elements are moving to the correct place.
$('.wcmsd-step-container').each(function() {
$(this).find('.wcmsd-checkbox-item-description').insertAfter($(this).find('.wcmsd-step-title'));
});
Updated snippet with a button to see before/after
$("#btn").click(() => {
$('.wcmsd-step-container').each(function() {
$(this).find('.wcmsd-checkbox-item-description').insertAfter($(this).find('.wcmsd-step-title'));
});
});
.wcmsd-step-content { background-color: yellow; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="btn">click me</button>
<!--Step 1-->
<div class="wcmsd-step-container">
<h2 class="wcmsd-step-title">What type of photo do you want?</h2>
<div class="wcmsd-step-content">
<label class="wcmsd-checkbox-item-title">choose your photo</label>
<p class="wcmsd-checkbox-item-description">Select up to 122. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan faucibus proin nisi, risus vehicula. Fames metus, metus consectetur.</p>
</div>
</div>
<!--Step 2-->
<div class="wcmsd-step-container">
<h2 class="wcmsd-step-title">What type of video do you want?</h2>
<div class="wcmsd-step-content">
<label class="wcmsd-checkbox-item-title">choose your video</label>
<p class="wcmsd-checkbox-item-description">Select up to 322. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan faucibus proin nisi, risus vehicula. Fames metus, metus consectetur.</p>
</div>
</div>

Related

Multiple tabs in same page using jQuery

I'm working on tabs I want multiple tabs on the same page and I don't want to change id's for the next tab because I have to pass dynamically. I tried using id same id's which are the conflict with each other. Can anyone suggest me. So, far I tried.
function atscTabs() {
$('.at-tabs-nav__item').click(function() {
var tab = $(this).data('tab');
$('.at-tab-__title_text').removeClass('current');
$('.at-tabs-nav__item').removeClass('current');
$(this).addClass('current');
$("#" + tab).addClass('current');
})
}
atscTabs();
.current {
color: white;
padding: 5px;
background-color: black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="at-tabs-c2a3d74" class="at-tabs">
<div class="at-tabs-nav">
<div>
<div class="at-tabs-nav__item">
<a class="at-tabs-title" href="#">
<div class="at-title-text-wrapper">
<span class="at-tab-__title_text current" data-tab="tab-1">Tab #1</span>
</div>
</a>
</div>
<div class="at-tabs-nav__item">
<a class="at-tabs-title" href="#">
<div class="at-title-text-wrapper">
<span class="at-tab-__title_text" data-tab="tab-2">Tab #2</span>
</div>
</a>
</div>
<div class="at-tabs-nav__item">
<a class="at-tabs-title" href="#">
<div class="at-title-text-wrapper">
<span class="at-tab-__title_text" data-tab="tab-3">Tab #3</span>
</div>
</a>
</div>
</div>
</div>
<div class="at-tabs-content">
<div class="at-tabs-content__item" id="tab-1">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
</div>
<div class="at-tabs-content__item" id="tab-2">
ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
</div>
<div class="at-tabs-content__item" id="tab-3">
I am item content. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
</div>
</div>
</div>
Hi i have created small script to solve your problem. I hope this will help.
function atscTabs() {
$('.at-tabs').each(function(index, item){
var $mainContainer = $(this);
var $menuContainer = $(this).find('.at-tabs-nav__item');
var $label = $(this).find('.at-tab-__title_text');
var $content =$(this).find('.at-tabs-content__item');
$content.hide();
$label.each(function(idx, ele){ $(this).attr('data-target', idx)});
$($menuContainer[0], $label[0]).addClass('current');
$($content[0]).show();
$menuContainer.click(function(ele){
$($mainContainer).find('.current').removeClass('current');
$(this).addClass('current');
$(this).find('.at-tab-__title_text').addClass('current');
$($mainContainer)
.find('.at-tabs-content .at-tabs-content__item')
.hide()
.eq(parseInt($(this).find('[data-target]')
.attr('data-target'))).show();
});
});
}
atscTabs();
Let me know if still need help. Avoid using one id multiple places.
FYI: https://stackoverflow.com/a/14446052/5011051

how to concatenate multiple textarea into one textarea and split that textarea into multiple textarea dynamically?

Also there should not be any visible seperator like (:) to split the textarea. Currently I have done it with (:) seperator. I need to separate it with a span tag may be which will be unvisible. Here is the code given below:
HTML Code:
<div class="container">
<h3 class="text-center text-primary">TextArea Concatenate and Revert</h3>
<form method="post" accept-charset="utf-8" action="">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<textarea id="text_area_1" rows="14" cols="100"></textarea>
</div>
</div>
<div class="row">
<div class="col-md-2 col-md-offset-5 border">
<img src="images/signature.png" alt="signature">
</div>
</div>
<div class="row">
<div class="col-md-4 col-md-offset-1">
<textarea id="text_area_2" rows="6" cols="50"></textarea>
</div>
<div class="col-md-4 col-md-offset-1">
<textarea id="text_area_3" rows="6" cols="50"></textarea>
</div>
</div>
<div class="row">
<div class="col-md-6">
<p>স্মারক নম্বর: ০৫.৪৫.৩৯০০.০১১.৬১.০০১.১৭.৫৬/১</p>
</div>
<div class="col-md-2 col-md-offset-2 border">
<img src="images/signature.png" alt="signature">
</div>
</div>
<div class="row">
<div class="col-md-4 col-md-offset-1">
<textarea id="text_area_4" rows="6" cols="50"></textarea>
</div>
<div class="col-md-4 col-md-offset-1">
<textarea id="text_area_5" rows="6" cols="50"></textarea>
</div>
</div>
<button type="button" class="btn btn-success" onclick="concatenate()">Concatenate</button>
</form>
<hr>
<div class="row">
<div class="col-md-12">
<textarea id="text_area_6" rows="40" cols="180"></textarea>
</div>
</div>
<button type="button" class="btn btn-warning" onclick="revert()">Revert</button>
</div>
Style:
.border{
border: 1px solid;}
Javascript:
<script>
var one = document.getElementById("text_area_1");
var two = document.getElementById("text_area_2");
var three = document.getElementById("text_area_3");
var four = document.getElementById("text_area_4");
var five = document.getElementById("text_area_5");
var six = document.getElementById("text_area_6");
function concatenate(){
six.value = one.value + ":" + two.value+ ":" + three.value+ ":" + four.value+ ":" + five.value;
one.value = "";
two.value = "";
three.value = "";
four.value = "";
five.value = "";
}
function revert(){
var val = six.value.split(":");
one.value = val[0];
two.value = val[1];
three.value = val[2];
four.value = val[3];
five.value = val[4];
six.value = "";
}
</script>
By using a global variable ( or variables ) you can assign the values when the concatenate button is clicked and they will be available later when the revert button is clicked.
<!doctype html>
<html>
<head>
<title>Concatenate() & revert()</title>
<script>
var texts={
'text_area_1':'',
'text_area_2':'',
'text_area_3':'',
'text_area_4':'',
'text_area_5':''
};
var target='text_area_6';
function $(id){
return document.getElementById(id);
}
function combine(o,b){
if( typeof( o )=='object' ){
var t=[];
var a=arguments;
var e=( a.length==3 ) ? a[2]:false;
var s=( a.length==4 ) ? a[3]:'=';
for( var n in o ){
if( b && typeof( o[ n ] )=='object' ) t.push( combine( o[ n ], b, e, s ) );
else t.push( o[ n ] );
}
return t;
}
return o;
}
function concatenate(){
var keys=Object.keys(texts);
for( k in keys ){
texts[ keys[ k ] ]=$( keys[ k ] ).value;
$( keys[ k ] ).value='';
}
$(target).value=combine( Object.values(texts).join(' '),0 );
}
function revert(){
var keys=Object.keys( texts );
for( k in keys ){
$( keys[ k ] ).value=texts[ keys[ k ] ];
}
$(target).value='';
}
</script>
</head>
<body>
<div class="container">
<h3 class="text-center text-primary">TextArea Concatenate and Revert</h3>
<form method="post" accept-charset="utf-8" action="">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<textarea id="text_area_1" rows="14" cols="100">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id imperdiet mi. Donec velit orci, consectetur sit amet mi id, eleifend pretium lorem. Integer orci ex, suscipit sit amet dui id, mollis condimentum elit. Fusce blandit quis magna eu malesuada. In hac habitasse platea dictumst. Nam tristique nunc at mauris porta elementum. Pellentesque ut lacinia metus, lacinia mollis odio. Praesent sed viverra metus. Phasellus non tristique nisl, ut congue erat. Aliquam neque leo, blandit eu varius id, mattis vel tellus.</textarea>
</div>
</div>
<div class="row">
<div class="col-md-2 col-md-offset-5 border">
<img src="images/signature.png" alt="signature">
</div>
</div>
<div class="row">
<div class="col-md-4 col-md-offset-1">
<textarea id="text_area_2" rows="6" cols="50">Etiam ullamcorper pulvinar tincidunt. Suspendisse scelerisque commodo nisl eget volutpat. Cras tristique quis eros lobortis blandit. Duis sed pellentesque est. Aenean sem ex, ultrices nec enim pharetra, placerat gravida turpis. Proin ultricies ultrices tellus ac condimentum. Aliquam nisl dolor, vulputate vitae risus vel, porta pulvinar ligula. Fusce dapibus rutrum pulvinar.</textarea>
</div>
<div class="col-md-4 col-md-offset-1">
<textarea id="text_area_3" rows="6" cols="50">Sed eget rhoncus sapien, in dapibus metus. Mauris porta, massa nec sodales dignissim, dui est accumsan lorem, vel vulputate velit mi eget velit. In a suscipit eros, eget hendrerit dui. In in imperdiet tellus.</textarea>
</div>
</div>
<div class="row">
<div class="col-md-6">
<p>?????? ?????: ??.??.????.???.??.???.??.??/?</p>
</div>
<div class="col-md-2 col-md-offset-2 border">
<img src="images/signature.png" alt="signature">
</div>
</div>
<div class="row">
<div class="col-md-4 col-md-offset-1">
<textarea id="text_area_4" rows="6" cols="50">Ut pellentesque nunc neque, nec mattis nisl commodo at. Aenean dictum tellus diam, vel scelerisque eros euismod quis. Nunc tellus mauris, suscipit at metus sed, pretium auctor arcu. Curabitur pretium pellentesque dictum. Pellentesque lacinia condimentum dictum. Praesent quis euismod lorem.</textarea>
</div>
<div class="col-md-4 col-md-offset-1">
<textarea id="text_area_5" rows="6" cols="50">Sed justo diam, commodo consectetur porta vitae, ultricies non ipsum. Donec eget magna odio. Fusce in orci vel erat fringilla accumsan in sit amet lacus. Fusce diam sapien, ullamcorper quis auctor ac, tempor ut quam. Duis iaculis convallis nunc, sed faucibus erat pharetra quis.</textarea>
</div>
</div>
<button type="button" class="btn btn-success" onclick="concatenate()">Concatenate</button>
</form>
<hr>
<div class="row">
<div class="col-md-12">
<textarea id="text_area_6" rows="40" cols="180"></textarea>
</div>
</div>
<button type="button" class="btn btn-warning" onclick="revert()">Revert</button>
</div>
</body>
</html>

jQuery - Using easeOutBounce in animation Not Work

I try to animate a div with a easeOutBounce effect when the page load, but is not working for me.
I have referenced the jQuery UI.
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
My jQuery code:
$(document).ready(function() {
$(".content").animate({marginTop: "-=50px"},1000,'easeOutBounce');
});
My html code:
<div class="content">
<h3>Titulo h3</h3>
<p>Este texto lleva una animacion lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nulla urna, consequat nec erat bibendum, ullamcorper fermentum ligula.</p>
<img width="50%" src="Images/javascript-movimiento.png" alt="animationJS" />
</div>
This works in Chrome - I see the title and the para, then very quickly the para slides up to the top with a pleasing bounce. Please confirm it works for you too and if so check you HTML for typos.
<!DOCTYPE HTML>
<html>
<head>
</head>
<body >
<div class="content">
<h3>Titulo h3</h3>
<p>Este texto lleva una animacion lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nulla urna, consequat nec erat bibendum, ullamcorper fermentum ligula.</p>
<img width="50%" src="Images/javascript-movimiento.png" alt="animationJS" />
</div>
</body>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script>
$(document).ready(function() {
$(".content").animate({marginTop: "-=50px"},1000,'easeOutBounce');
});
</script>
</html>

JQuery Hide / Show Div Before Button

What i would like, i click on a link, and a div before this shows or hides, ive tried .prev() and .before() but i do not think i am using them correctly. The code is only part of it, the same code is repeated using owl carousel.
What is happening is all the classes are showing it, not just the 1 item.
So when i click on the showMore button, i want only the previous class: moreInfo to show / hide.
$('.showMore').click(function() {
var information = $('.moreInfo');
if (information.is(":hidden")) {
information.slideDown("slow");
} else {
information.slideUp("slow");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="item">
<span>
<img src="owl1.jpg">
<p class="title">Owl</p>
<div class="moreInfo">
<div class="bio">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut feugiat urna arcu, vel molestie nunc commodo non. Nullam vestibulum odio vitae fermentum rutrum.</p>
</div>
<div class="youtube">
<iframe width="560" height="349" src="http://www.youtube.com/embed/n_dZNLr2cME?rel=0&hd=1" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<div class="buttons">
<i class="fa fa-arrow-down"></i>
</div>
</span>
</div>
Thanks
You need to go up one to the button DIV and then go to the previous DIV to reach the corresponding moreInfo DIV.
var information = $(this).closest(".buttons").prev(".moreInfo");
Here's the whole updated code:
$('.showMore').click(function() {
var information = $(this).closest(".buttons").prev(".moreInfo");
if (information.is(":hidden")) {
information.slideDown("slow");
$(this).find("i").text("Show less");
} else {
information.slideUp("slow");
$(this).find("i").text("Show more");
}
});
.moreInfo {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="item">
<span>
<p class="title">Owl</p>
<div class="moreInfo">
<div class="bio">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut feugiat urna arcu, vel molestie nunc commodo non. Nullam vestibulum odio vitae fermentum rutrum.</p>
</div>
<div class="youtube">
<iframe width="560" height="349" src="http://www.youtube.com/embed/n_dZNLr2cME?rel=0&hd=1" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<div class="buttons">
<i class="fa fa-arrow-down">Show more</i>
</div>
</span>
</div>

How do i use Scripts in mvc. not inline script

I wrote js code in MyScript.js and how I can make my script run when page load?
and how I can make script file run in my mvc?
I hope I can get a precise answer and understand that good.
When I did on regular html and not in mvc it works very well
the two js file i would like to use are
1. jquery.zaccordion.js
2. MyScript.js
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>#ViewBag.Title</title>
#Styles.Render("~/Content/css")
#Scripts.Render("~/bundles/modernizr")
#Scripts.Render("~/bundles/jquery-1.8.2.js")
#Scripts.Render("~/bundles/jquery.zaccordion.js")
#Scripts.Render("~/bundles/MyScript.js")
#RenderSection("scripts", required: false)
#RenderSection("MyScript", required: false)
</head>
<body>
<header>
<div class="site-logo">
<img class="img-logo-size" src="Images/logo.png" alt="" />
</div>
<div class="manu">
<div class="nav-tabs">
<div class="hoverBtn">#Html.ActionLink("Home", "Index", "Home")</div>
<div class="hoverBtn">#Html.ActionLink("About", "About", "Home")</div>
<div class="hoverBtn">#Html.ActionLink("Contact","Contact","Home")</div>
</div>
</div>
<div class="slider-border">
<ul id="splash">
<li>
<img class="img-size" src="../Images/TM-front-image-World-network.jpg" alt="" />
<div>
<strong>Old School Diner</strong>
<p class="splash-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras porttitor lacus sollicitudin ligula sagittis a ultricies nulla ultricies. Ut odio nisi, posuere sed blandit at, bibendum non dolor.</p>
</div>
</li>
<li>
<img class="img-size" src="../Images/banner-your-it-11.jpg" alt="" />
<div>
<strong>A Day at the Pool</strong>
<p class="splash-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras in condimentum sem. Aenean faucibus dignissim auctor. In ut libero vitae augue laoreet iaculis at a tellus.</p>
</div>
</li>
<li>
<img class="img-size" src="../Images/network1.png" alt="" />
<div>
<strong>Fill it Up!</strong>
<p class="splash-text">Duis viverra velit orci. Sed vestibulum mi nec est imperdiet sed ullamcorper augue molestie. Donec ultrices facilisis erat at porttitor.</p>
</div>
</li>
<li>
<img class="img-size" src="../Images/1338453958network_header.jpg" alt="" />
<div>
<strong>Going for a Drive</strong>
<p class="splash-text">Phasellus sed lectus nisl, eget cursus eros. Suspendisse posuere orci eu lorem luctus et porta nunc posuere. Cras sed lectus vitae leo accumsan adipiscing.</p>
</div>
</li>
</ul>
</div>
</header>
<div class="page-wrap">
#RenderBody()
#Scripts.Render("~/bundles/jquery")
#RenderSection("scripts", required: false)
#RenderSection("MyScript", required: false)
</div>
<footer>
<div class="site-footer">
<div class="float-left">
<p>©#DateTime.Now.Year-Erez Gershon</p>
</div>
</div>
</footer>
Thanks for all
For this line to work #Scripts.Render("~/bundles/MyScript.js") you have to register MyScript.js to bundle in BundleConfig.cs file.
bundles.Add(new ScriptBundle("~/bundles/MyScript.js").Include(
"~/Scripts/MyScript.js")); // make sure that this is your path to MyScript.js
If you want to use #RenderSection("MyScript", required: false), it's a section that will be rendered in a view, like below. But if you want to add MyScript.js you have to include that line of code inside the section.
#section MyScript {
#Scripts.Render("~/bundles/MyScript.js")
}
Note: Every new script you add in your project that you want to use it with #Scripts.Render you have to include in BundleConfig.

Categories

Resources