いくつかの問題:
- 新しいアイテムを追加するロジックは常に true です (要素が存在するかどうかのみを確認するため、常に存在します)。
- 子チェックは、幅チェック (別のチェック) の内側にある必要があります。
placeHolderdiv をもう一度表示する必要があります。
$()jQuery変数の周りに冗長性があります
- 必要なすべての要素に対して jQuery 変数がありますが、それらを使用しない場合があります。
例えば
$(document).ready(function () {
var $window = $(window);
function checkWidth() {
//set main vars
var windowsize = $window.width();
var $sideBarContent = $('#sidebar .dummy-content');
var $placeHolder = $('#place-holder');
//perform the main check
if (windowsize >= 768) {
if (!$placeHolder.children().length) {
$sideBarContent.clone(true)
.appendTo($placeHolder);
}
$placeHolder.show();
} else {
$placeHolder.hide();
}
}
// Bind event listener and do initial execute
$window.resize(checkWidth).trigger("resize");
});
JSFiddle: http://jsfiddle.net/TrueBlueAussie/jtfv4jjt/8/
注: 開始時に 1 回クローンを作成し、そのパネルの表示を切り替えるだけでよいため、コードをさらに簡素化できます。
例えば
$(document).ready(function () {
var $window = $(window);
var $sideBarContent = $('#sidebar .dummy-content');
var $placeHolder = $('#place-holder');
function checkWidth() {
$placeHolder.toggle($window.width() >= 768);
}
// Clone at start - then hide it
$sideBarContent.clone(true).appendTo($placeHolder);
// Bind event listener and do initial execute
$window.resize(checkWidth).trigger("resize");
});
JSFiddle: http://jsfiddle.net/TrueBlueAussie/jtfv4jjt/6/
繰り返しますが、これは短縮できます。
$(function () {
var $window = $(window);
var $sideBarContent = $('#sidebar .dummy-content');
var $placeHolder = $('#place-holder');
// Clone content at start - then hide it
$sideBarContent.clone(true).appendTo($placeHolder);
// Bind event listener and do initial execute
$window.resize(function(){
$placeHolder.toggle($window.width() >= 768)
}).trigger("resize");
});
JSFiddle: http://jsfiddle.net/TrueBlueAussie/jtfv4jjt/7/
それは今のところすべてです :)
最後のポイント:
Twitter ブートストラップを使用している場合は、パネルを適切なクラス ( のようなものvisible-md) で装飾するだけで、これがすべて行われます :)