jQueryを使用して li 要素を非表示および表示する際に問題が発生しています。私のコードは Chrome と Internet Explorer 9 で動作しますが、Internet Explorer 9 が互換モードに入るか、下位のブラウザーに設定されていると、暗黙のうちに失敗します。
アイデアは、クラスでフィルタリングし、結果をページングするドロップダウンを用意することです。以下のサンプルでは、ほとんどのページング コードを削除しました。
私が知る限り、問題は にselector.children().hide();
ありますが、これについてはよくわかりません。
HTML をW3Cバリデーターで実行しましたが、問題ないように見えますが、Chrome ツールでは JavaScript エラーは発生せず、Internet Explorer 開発ツールでは明らかなエラーは発生しませんでした (ただし、これらに慣れていないため、何かが欠けている可能性があります)。
以下を HTML ファイルに保存すると、選択時にli
要素をフィルタリングするドロップダウンが表示されます。少なくともChromeでは:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<script>
//<![CDATA[
function buildPaging(filterClass) {
var selector = $('.paging');
selector.wrap("<div class='simplePagerContainer'></div>");
var pageSize = 2;
var pageCounter = 1;
var currentPage = 1;
var step =0;
selector.children().each(function (i) {
var item = $(this);
var hasClass = false;
if (filterClass !== undefined &&
filterClass !== '' &&
filterClass !== 'Sites:' &&
item.hasClass(filterClass)) {
hasClass = true;
}
else
if (filterClass === undefined ||
filterClass === '' ||
filterClass === 'Sites:') {
hasClass = true;
}
if (step < pageCounter * pageSize && step >= (pageCounter - 1) * pageSize && hasClass) {
$(this).addClass("simplePagerPage" + pageCounter);
step++;
}
else
if (hasClass) {
$(this).addClass("simplePagerPage" + (pageCounter + 1));
pageCounter++;
step++;
}
});
selector.children().hide();
selector.children(".simplePagerPage" + currentPage).show();
};
function cleanPaging() {
$('li').removeClass('simplePagerPage1 simplePagerPage2 simplePagerPage3 simplePagerPage4 simplePagerPage5 simplePagerPage6 simplePagerPage7 simplePagerPage8')
$('.simplePagerNav').remove();
}
$(document).ready(function() {
buildPaging();
});
var selectedItem;
function hideMessage(period) {
var classList = $('.EMI_Message_Option');
selectedItem = period;
var keep;
for (var i = 0; i < classList.length; i++) {
if (classList[i].innerHTML !== period) {
$('.' + classList[i].innerHTML).hide();
}
else {
keep = classList[i].innerHTML;
}
}
$('.' + keep).show();
cleanPaging();
buildPaging(period);
}
//]]>
</script>
<div class="EMI_Messages">
<div class="EMI_Messages">
<div class="MessageDropdown">
<select onchange="hideMessage(this.value)">
<option>Sites:</option>
<option>CSR</option>
<option>Sales</option>
</select>
</div>
<ul class="paging">
<li class="CSR">
<div>
<div>
<a href="http://example.com/">CSR</a>
</div>
<div>byline</div>
<div>11/26/2012 12:00:00 AM</div>
</div>
</li>
<li class="Sales">
<div>
<div>
<a href="http://example.com/">Sales</a>
</div>
<div>sample text</div>
<div>11/21/2012 12:00:00 AM</div>
</div>
</li>
</ul>
</div>
<div class="pager"></div>
</div>
</body>
</html>