2011-12-02 2 views
3

CSS (현재)에는 nth-letter psuedo-selector가 없습니다. span 태그를 사용하지 않고이 선택기를 jQuery로 모방하는 방법이 있습니까?jQuery로 n 번째 문자를 모방합니다.

도움을 주시면 큰 도움이됩니다.

+0

아니요, 수십 개의 포장지 없이는 불가능합니다. –

+1

솔루션이 약간 복잡하고 질문이 조금 넓기 때문에 의견을 보내주십시오. 기본적으로 요구 사항에 따라 jquery를 수정하여 선택기 'nth-letter'를 추가하고 부모 선택기를 기반으로 선택해야합니다. 그런 다음 dom 요소 텍스트 노드 ('text()')를 얻은 후 문자 (또는 문자)를 세어 문자열을 분리하여 인라인 스타일 또는 특수 스타일 클래스가있는 요소 주위에 스팬을 추가 할 수 있습니다. –

+0

@KevinPeno 그게 내가 한 일이야, n 번째 문자 선택기 비트 빼기. –

답변

2

문자가 sort 태그 (span, em, div 또는 그 중 ...)로 감싸지 않는 한, 문자는 DOM 요소가 아닙니다. 따라서 CSS 나 DOM 조작 함수로 직접 대상을 지정할 수는 없습니다.

+0

글자는 아니지만 모든 것이 조작 될 수있는 문자열 인 dom 요소 내에 있습니다. OP를 요청할 때 JavaScript를 사용하기 전에 문자를 래핑 할 필요가 없습니다. –

+0

@Kevin 문자열은 할 수 있지만, 내가 말했듯이, 문자는 직접적으로 * 표적으로 할 수 없습니다. 따라서 jquery 의사 선택기를 만들 수 없습니다. 텍스트 노드를 선택하고, 문자열을 분할하고, 문자를 다른 노드로 감싸서 다르게 스타일을 지정해야합니다. – Damp

+0

@ 케빈 : 검색 됨, 예. 제거 되었습니까? 삽입 되었습니까? 약간의 작업. 그러나 텍스트 노드의 스타일을 지정하거나 애니메이션을 적용 할 수는 없습니다. 그리고 특히 텍스트 노드의 * part * 스타일을 지정할 수 없습니다. – cHao

1

jQuery는 DOM 요소를 추출하기위한 쿼리 언어이기 때문에 jQuery를 사용하여 특정 문자를 추출 할 수 없습니다. 텍스트 노드를 분할하고 특정 문자를 실제로 대상으로하는 새로운 DOM 요소 (예 : 범위 포함)를 만들어야합니다. 그러나, "스팬의 무리없이"그것은 불가능합니다.

내 시도가 비슷합니다. 나는이 생산 품질을 정말로 고려하지 않고 그것과 관련된 몇 가지 버그가있을 것이라고 말해야한다. 대신에 주로 문자열 조작을 사용하여이 문제에 접근하는 방법에 대한 아이디어를 줄 수 있기를 바랍니다.

다시 말하지만, 시작하기에 앞서 빠르고 간단합니다.

function colorizeNthLetter(text, letter) { 
    var words = text.split(' '); 
    for (var i = 0; i < words.length; i++) { 
     if (words[i].length > letter) { 
      words[i] = words[i].substring(0, letter-1) + 
         "<span class='color'>" + 
         words[i].substring(letter-1, letter) + 
         "</span>" + 
         words[i].substring(letter); 
     } 
    } 
    return words.join(" "); 
} 

http://jsfiddle.net/sQ98n/

한 가능성이 버그는 단어를 결정하는 공간이 분할 가능성이 단어 분리에 대해 생각의 불완전한 방법입니다. 더 많이있을 것입니다. :)

+0

또 다른 버그 : 한 번이 작업을 완료하면 카운트가 해제됩니다. 같은 텍스트 노드에서 두 번 이상 수행하려는 경우 올바른 계산/위치를 파악하기 위해 약간의 작업을 수행해야합니다. – cHao

+0

@cHao 일종의 사실입니다. 필자는 HTML 코드를 제거 할'$ ('# somelement'). text()'를 전달하여 내 피들처럼 사용하게 될 것이라는 가정하에이 코드를 작성했기 때문에 여러 번 반복해서 실행할 수있었습니다. . 유일한 문제는 각 블록에서 한 글자 이상을 색칠 할 수 없다는 것입니다. 그렇습니다. 정말로 버그는 아니지만, 이것이 작성된 내용이 아닙니다. –