У меня есть два элемента "src" и "dest"
"src" и "dest" находятся в разных DOM-узлах, которые не могут иметь одного и того же родителя.
Мне нужно поместить элемент "src" в ту же видимую позицию, что и "dest".
Элемент "src" также должен иметь те же размеры, что и "dest".
У меня есть следующий код для случая, когда "src" и "dest" имеют одного и того же родителя:
src.css("position", "absolute");
src.css("top", dest.offset().top);
src.css("left", dest.offset().left);
src.width(dest.width());
// Show "src" element, instead of "dest". "src" must be in the same visible position, as "dest"
dest.css("opacity", 0);
src.show();
К сожалению, это не работает. Элемент "src" имеет смещение вниз и влево, для этого я не могу найти причину.
Может быть, я что-то не так делаю ...
Как правильно сделать это для двух случаев?
- "src" и "dest", имеющие одного и того же прародителя
- "src" и "dest" не имеют одного и того же родителя. Может быть, пра-пра-пра-прародитель общий для обоих.
Обновление:
Я подготовил простой документ HMTL, который выполняет простую визуальную замену одного элемента другим:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MacBlog</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js" charset="utf-8"></script>
<style type="text/css" media="screen">
.dest {
background-color: #0cf;
width: 480px;
height: 320px;
}
.src {
background-color: #09c;
width: 1024px;
height: 768px;
}
</style>
<script type="text/javascript" charset="utf-8">
jQuery(function($){
// Common items, to deal with
var src = $(".src");
var dest = $(".dest");
// Setup
src.hide();
// Interaction
dest.click(function(){
src.width(dest.width());
src.height(dest.height());
src.offset(dest.offset());
dest.hide();
src.show();
});
});
</script>
</head>
<body>
<div>
<!--On clicking, this element should visually be swapped by ".src" element -->
<div class="dest"><p>dest</p></div>
<div class="src"><p>src</p></div>
</div>
</body>
</html>
Не работает правильно. После «свопинга» элемент «src» имеет странное смещение в верхнем левом направлении на ~ 30 пикселей.
Я использую последнюю версию Safari 5, если в этом есть смысл.
Обновление 2:
К сожалению, это также не работает. Я обновил мой пример:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MacBlog</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js" charset="utf-8"></script>
<style type="text/css" media="screen">
div {
margin: 0;
padding: 0;
}
.holder {
position: relative;
top: 40pt;
left: 40pt;
border: black solid thin;
}
.dest {
background-color: #0cf;
width: 480px;
height: 320px;
}
.src {
background-color: #09c;
width: 1024px;
height: 768px;
}
</style>
<script type="text/javascript" charset="utf-8">
jQuery(function($){
// Common items, to deal with
var src = $(".src");
var dest = $(".dest");
// Setup
src.hide();
// Interaction
dest.click(function(){
src.css("position", "absolute");
src.width(dest.width());
src.height(dest.height());
src.offset(dest.offset());
dest.hide();
src.show();
});
});
</script>
</head>
<body>
<div class="holder">
<!--On clicking, this element should visually be swapped by ".src" element -->
<div class="dest"><p>dest</p></div>
<div class="src"><p>src</p></div>
</div>
</body>
</html>