2010-06-15 4 views
1

jquery를 사용하여 단락 태그 (Aaron Harun의 명성) 그룹을 정렬합니다. URL 문자열에서 "letter"(문자) 값을 가져 와서 해당 문자로 시작하는 단락 만 표시합니다. 다른 모든 것을 숨기고 중복 된 내용이 표시되지 않도록 목록을 통합합니다. Jquery 편지로 정렬

코드 참조 :

var letter = '<?php echo(strlen($_GET['letter']) == 1) ? $_GET['letter'] : ''; ?>' 

function finish(){ 
    var found_first = []; 
    jQuery('p').each(function(){  
    if(jQuery(this).text().substr(0,1).toUpperCase() == letter){ 
    if(found_first[jQuery(this).text()] != true){ 
     jQuery(this).addClass('current-series'); 
     found_first[jQuery(this).text()] = true; 
    }else{ 
     jQuery(this).hide(); 
    } 
    } 
    else{ jQuery(this).hide();} 
    }) 


} 

이 하루 종일 함께 일하고와 나는이 2 개 질문이 있습니다

  1. 이 단어를 무시 얻을 수있는 방법이 있나요 '는' , 처음이라면? 예를 들어 단락이 'The Amazing'으로 시작하면 'T'페이지가 아니라 'A'페이지에 표시하고 싶습니다.

  2. (모두) 숫자에 대해 하나의 페이지가있는 방법이 있습니까? 예를 들어, 페이지에 대한 URL은 domain.com/index.php?letter=0과 유사 할 것이며 이는 숫자, 숫자로 시작하는 단락 태그 만 표시합니다. 현재는 단일 번호로이 작업을 수행 할 수 있지만 모든 번호에 대해 1 페이지를 원합니다.

답변

2

히야! 나는 스크립트를 다시 작성 결국,하지만 당신은

/* Return a unique array */ 
Array.prototype.getUnique = function(){ 
var u = {}, a = [], i, l; 
for(i = 0, l = this.length; i < l; ++i){ 
    if(this[i] in u) continue; 
    a.push(this[i]); 
    u[this[i]] = 1; 
} 
return a; 
} 

/* Show paragraph containing first letter (or number if zero) */ 
function finish(letter){ 
var t, txt, found = []; 
if (letter.match(/\d/)) { letter = "0"; } // set letter to zero if it is any number 
$('p').each(function(){ 
    // grab first 20 characters so we don't need to split the entire paragraph 
    txt = $(this).text().substr(0,20).split(' '); 
    if (txt[0].toLowerCase() == 'the') { txt.shift(); } // remove first element if it's "the" 
    t = txt[0].match(/\d/) ? "0" : txt[0].substr(0,1).toLowerCase(); // set zero for digits or get first letter 
    found.push(t); // Add letter/number to array 
    if ((t == "0" && letter == "0") || t == letter.substr(0,1).toLowerCase()){ // show paragraph 
    $(this).addClass('current-series').show(); 
    } else { 
    $(this).hide(); 
    } 
}) 
return found.getUnique().sort(); 
} 

업데이트 :)에 대한 작업 demo을했다 : 좋아, 나는 마침내 당신이 통합에 의해 무슨 뜻인지 이해! 예! 고유 한 항목 만 표시되도록하려는 것입니다. 내가 updated the demo했습니다 나는 또한 URL에서 문자 변수를 잡고 작은 스크립트를 추가 한, 그래서 당신은 정말이 PHP를 사용할 필요가 없습니다 : 데모에

참고, 나는 제거했다 선택 목록은,하지만 당신은이 줄을 수정하여 (단지 데모) 선택된 문자를 변경할 수 있습니다 다음 '0' 당신이 (데모 전용) 표시 원하는 문자로

var letter = getletter() || '0'; 

변경합니다. 라이브 버전에서는 자동으로 URL에서 문자를 가져옵니다.

/* get letter from URL */ 
function getletter(){ 
var p = (new RegExp("[\\?&]letter=([^&#]*)")).exec(window.location.href); 
return (p===null) ? "" : p[1]; 
} 

/* Show paragraph containing first letter (or number if zero) */ 
function finish(){ 
var t, txt, found = []; 
// get letter from url or set to zero if it doesn't exist 
var letter = getletter() || '0'; 
// set letter to zero if it is any number 
if (letter.match(/\d/)) { letter = "0"; } 
$('p').each(function(){ 
    // grab first 20 characters so we don't need to split the entire paragraph 
    txt = $(this).text().substr(0,20).split(' '); 
    // remove first element if it's "the" 
    if (txt[0].toLowerCase() == 'the') { txt.shift(); } 
    t = txt[0].match(/\d/) ? "0" : txt[0].substr(0,1).toLowerCase(); // set zero for digits or get first letter 
    // show paragraph if unique and matches letter 
    if ((found[$(this).text()] != true) && ((t == "0" && letter == "0") || t == letter.substr(0,1).toLowerCase())){ 
    $(this).addClass('current-series').show(); 
    found[$(this).text()] = true; 
    } else { 
    $(this).hide(); 
    } 
}) 
} 
+0

@Fudgey - 정말 멋지지만, URL 문자열에서 'letter'변수를 가져 오지 않는 것 같습니다. 생각? – Batfan

+0

스크립트로 약간 놀고 변경했습니다 - function finish (letter) {- to - function finish() {- 이제 URL 문자열에서 변수를 선택합니다. 그러나 목록을 통합하지 않으므로 고유 항목 만 표시됩니다. : P – Batfan

+0

통합 목록 작성 방법에 대한 코드가 명확하지 않으므로 필자는'finish' 함수를 사용하여 목록을 배열로 반환했습니다. 데모를 보면'var f = finish (letter);'f가이리스트를 포함하고있는 것을 볼 수있을 것이다. 나는 당신이 그 코드의 조금을 제공하면 더 당신을 도울 수 있었다. – Mottie