ورود

View Full Version : سوال: چرا این کد ساده کار نمیکنه؟



prince4prodigy
جمعه 24 شهریور 1391, 11:39 صبح
من میخوام در این کد با سافاده از متد after() یا append() یک عکس رو جا به جا کنم ولی انجام نمیشه.
ممنون اگه علتش رو توضیح بدید.

<div id="d-source">
<div>
<input type="checkbox" name="chbox1" id="chbox1" />
<br/>
<img src="8.jpg" class="pic" id="pic1" /> </div>
<div>
<input type="checkbox" name="chbox2" id="chbox2" />
<br/>
<img src="9.jpg" class="pic" id="pic2" /> </div>
<div>
<input type="checkbox" name="chbox3" id="chbox3" />
<br/>
<img src="10.jpg" class="pic" id="pic3"/> </div>
</div>

<script type="text/javascript" language="javascript">

$('#pic1').append($('#pic2'))

</script>

Yuness Mehdian
جمعه 24 شهریور 1391, 13:25 عصر
متد append یک child ایجاد میکنه و شما میخواید به تگ img یک child اضافه کنید که اشتباهه چون img یک تگ تکی هست و نمیتونه child داشته باشه . درستش اینه که به div اضافه کنید :

var pic2 = $("#pic2");

$("#pic2").remove();

$("#d-source div:first").append(pic2);


اگه دقت کنید اول باید تگی رو که میخوایم جا به جا کنیم تو یه متغیر موقتی مثل pic2 بریزیم سپس تگ رو حذف کنیم بعدش تگ رو جایی که می خوایم append کنیم .

prince4prodigy
جمعه 24 شهریور 1391, 13:48 عصر
من فکر میکنم شما تو این کدی که گذاشتید با استفاده از یک متغییر و سپس حذف کردن #pic2 هم جواب سوال رو دادید و هم کد رو اصلاح کردید.
به جز این کدی که شما نوشتید میشه کد دیگه ای هم نوشت که احتیاجی به متغییر نداشته باشه.
شاید هم کد HTML من ناقص باشه و اگه بهینهتر نوشته بشه این کار بهتر انجام بشه.

Yuness Mehdian
جمعه 24 شهریور 1391, 15:12 عصر
من فکر میکنم شما تو این کدی که گذاشتید با استفاده از یک متغییر و سپس حذف کردن #pic2 هم جواب سوال رو دادید و هم کد رو اصلاح کردید.بله


به جز این کدی که شما نوشتید میشه کد دیگه ای هم نوشت که احتیاجی به متغییر نداشته باشه
ببینید شما میخواید یک عکس رو جابه جا کنید و منظورتون از جا به جایی با توجه به کدی که گذاشتید اینه که کلا از یه div به یه div دیگه منتقل بشه و چون تگ های img که گذاشتید دارای id هستند پس باید تو کل page یکتا باشن و اگه فقط روی div مقصد append انجام بدیم یک کپی از img ما به اونجا اضافه میشه با همون id و نمیشه با استفاده از id اون تگ قبلی رو از بین برد پس میایم موقتا اون رو تو یه متغیر میریزیم و قبلی رو حذف میکنیم و متغیر (که حاوی تگ هست) رو به جایی که میخوایم append می کنیم . شاید راه های دیگه ای هم وجود داشته باشه کلا این جور کارها مربوط میشه به اصلاح ساختار DOM . سرچ کنید .

این خط رو :

$("#d-source div:first").append(pic2);

میشه اینطوری هم نوشت :

$("#pic1").after(pic2);

Yuness Mehdian
جمعه 24 شهریور 1391, 16:12 عصر
توابع دستکاری کننده DOM در jquery (http://api.jquery.com/category/manipulation/)

prince4prodigy
جمعه 24 شهریور 1391, 16:38 عصر
مشکل اصلی اینجاست که این کد هم کار نمیکنه...

prince4prodigy
جمعه 24 شهریور 1391, 16:55 عصر
تو فروم jQuery هم مطرح کردم و چند نفر جواب دادن . امتحان کردم ولی چیزی دست گیرم نشد.

https://forum.jquery.com/topic/why-doesn-t-work-this-simple-code

plague
جمعه 24 شهریور 1391, 17:14 عصر
الان کدت چیه ؟

prince4prodigy
جمعه 24 شهریور 1391, 17:16 عصر
همونی که اول گذاشتم ولی به جای کد جاواسکریپتش کد شما رو گذاشتم(اون اولی که گفتید)

Yuness Mehdian
جمعه 24 شهریور 1391, 17:18 عصر
از appendTo هم میشه استفاده کرد خودش عمل حذف رو انجام میده . کدت رو کامل بذار

prince4prodigy
جمعه 24 شهریور 1391, 17:22 عصر
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" language="javascript" src="jq/jquery-1.7.2.min.js"></script>
<script type="text/ecmascript" language="javascript" src="jq/jquery-ui-1.8.22.custom.min.js"></script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>
<table width="715" border="0">
<tr>
<td width="250"><form>
<table id="tbl1">
<tr>
<td >username:</td>
<td ><input type="text" name="textfield" id="textfield" /></td>
</tr>
<tr>
<td>password:</td>
<td><input type="password" name="textfield2" id="textfield2" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><button id="btn" >button</button>
<input type="submit" value="submit" /></td>
</tr>
</table>
</form></td>
<td width="553"><table width="347" border="1px" class="tbl" id="tbl2">
<tr>
<th scope="col">name</th>
<th scope="col">user</th>
<th scope="col">pass</th>
<th scope="col">age</th>
</tr>
<tr>
<td>ali</td>
<td>ali-bad</td>
<td>666</td>
<td>26</td>
</tr>
<tr>
<td><input type="password" id="pass" /></td>
<td>prince</td>
<td>123</td>
<td>19</td>
</tr>
<tr>
<td><input type="text" /></td>
<td>JLO</td>
<td>001</td>
<td><input type="checkbox" name="checkbox" id="checkbox" /></td>
</tr>
</table></td>
</tr>
</table>
<table width="589" border="0">
<tr>
<td width="141"><ul>
<li>
<p id="p1">p1</p>
<ul>
<li>
<p id="p2">p2</p>
<p id="p3">p3</p>
</li>
<p id="p4"><a href="http://www.google.com" id="go">a in p4</a></p>
</ul>
<p id="p5"><a href="http://www.yahoo.com" id="ya">a in p5</a></p>
</li>
<p id="p6"></p>
<p id="p7"><a href="home.php">p7</a></p>
<a href="http://www.google.com" id="go1">a </a>
</ul></td>
<td width="438"><table width="342" border="0" cellspacing="2" cellpadding="3">
<tr>
<td width="80"><img src="1.jpg" width="94" height="117" alt="animal"/></td>
<td width="80"><img src="2.jpg" width="214" height="200" /></td>
<td width="80"><img src="3.jpg" width="124" height="148" alt="animal" /></td>
<td width="68"></td>
</tr>
<tr>
<td><img src="4.jpg" width="543" height="766" title="human" alt="human" /></td>
<td><img src="7.jpg" width="509" height="720" title="human" /></td>
<td><img src="6.jpg" width="491" height="655" title="human" /></td>
<td></td>
</tr>
</table></td>
</tr>
</table>
<div id="d9" class="dvg">Since the German and French pricing is the same, I guess those would be the starting prices for the Apple iPhone 5 lineup throughout most of Europe.
As its evident, the iPhone 5 prices are equal to what the iPhone 4S used to cost. Now that the iPhone 5 has been announced however, the iPhone 4S prices have already been slashed across European Apple stores and now starts from €579 SIM-free.
As you probably know, iPhone 5 pre-orders start tomorrow, on September 14, while Apple stores will start selling the new iPhone on September 21.</div>
</th>
<div id="d10" class="dvr"></div>
<div id="d8"></div>
<p>&nbsp;</p>
<div id="d-source">
<div id="p1">
<input type="checkbox" name="chbox1" id="chbox1" />
<br/>
<img src="8.jpg" class="pic" id="pic1" /> </div>
<div id="p1">
<input type="checkbox" name="chbox2" id="chbox2" />
<br/>
<img src="9.jpg" class="pic" id="pic2" /> </div>
<div id="p1">
<input type="checkbox" name="chbox3" id="chbox3" />
<br/>
<img src="10.jpg" class="pic" id="pic3"/> </div>
</div>
<div id="d-target" data-module="Target Areas" data-module-id="targetPane">
<div id="target1" class="target">Target 1</div>
<div id="target2" class="target">Target 3</div>
<div id="target3" class="target">Target 2</div>
</div>
</body>
<script type="text/javascript" language="javascript">

$('#tbl1').addClass('tbl')//add class
$('#textfield,#textfield2').addClass('txf')//add class
$('input:not([type=password])').css("background-color","#FC0")//no color for pass

var a=["garfield","flower","hamster","girl","L.messi","Constantine"]//img title
$('img').each(function(n) {
this.title = a[n];
});
$('img').attr('title',function(i,p){//img title

return a[i]
});

$('a').attr('target','_blank')//a TAGs in new Tab Opened


function sw(){//Table toogle class , change color when Onmoseover()
$('#tbl1,#tbl2').toggleClass("tbl2")
};
$('#tbl1').addClass("tbl2").add("#tbl2")
$("#tbl1,#tbl2").mouseover(sw).mouseout(sw)


$(function(){//counter height() and width() from div
$(window).resize(count1);
count1();
});

function count1() {
$('#d10').html(
$('#d9').width()+'x'+$('#d9').height()
);
}


$('img').each(function(index, element) {// img id
this.id=a[index];
});

$('img:not(.pic)').addClass('img')//add class to image

$('#pic1').insertAfter($('#girl'))


</script>
</html>

Yuness Mehdian
جمعه 24 شهریور 1391, 17:33 عصر
ببین این کد رو بذار تو یه فایل جدید و سیو کن البته آدرس اسکریپت jquery رو اصلاح کن و دو تا عکس به اسم 1 و 2 با پسوند jpg بذار کنارش بعد اجرا کن



<!DOCTYPE HTML>

<html>
<head>
<script type="text/javascript" src="includes/js/jquery-1.8.0.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){
alert("asf");
$("#second_Img").click(function(){
$(this).appendTo("#wrapper div:first");
// alert("asf");
});
});
</script>
</head>
<body>
<div id="wrapper">

<div style="border: 2px solid green;">
<h1>section 1</h1>
<img src="1.jpg" id="first_Img" />
</div>

<div style="border: 2px solid blue;">
<h1>section 2</h1>
<img src="2.jpg" id="second_Img" />
</div>

</div>
</body>
</html>

Yuness Mehdian
جمعه 24 شهریور 1391, 17:56 عصر
مشکلی نداره باید کار کنه

prince4prodigy
جمعه 24 شهریور 1391, 18:29 عصر
ممنون مشکلی نداشت