2009-09-14 1 views
1

jquery/javascript를 사용하여 클래스 이름을 얻는 방법을 찾고 있는데 그 중 일부만 알면 더 많은 것이 있습니다. 해당 요소에 적용된 하나의 클래스보다요소에 적용되는 유일한 클래스가 아닌 경우 해당 클래스의 이름을 알면 클래스 이름을 가져옵니다.

"charLimit_"로 시작하는 클래스를 찾고 있다면 주어진 클래스에 유일한 클래스가 아닌 경우에도 전체 클래스 이름을 알고 싶습니다. 예제 HTML은 다음과 같습니다.

<input class="charLimit_30 lastNameValidation" type="text" /> 

지금까지 아래의 배열에 모두 "charLimit_30"와 "lastNameValidation"를 넣어 것입니다,하지만 방법은 그때 나는 단지 "charLimit_30을"싶은 말과 만 나에게 밑줄 후 발견 된 값을 알 수 있습니까 무엇 (30).

var classMName = $('[class*=charLimit_]').attr("class").split(' '); 

도움을 주셔서 감사합니다. 물론 수업 시간에 밑줄 다음 당신은 첫 번째 항목 및 모든 필요한 경우 :

답변

2

하지만 더 jQuery를 흉내 방법 : 숫자입니다,이 같은 그것을 할 것

var numbersAfterCharLimit = []; 

$('[class*="charLimit_"]').each(function() { 
    var matches; 
    if (matches = this.className.match(/(?:\s+|^)charLimit_([0-9]+)(?:\s+|$)/)) { 
     numbersAfterCharLimit.push(parseInt(matches[1], 10)); 
    } 
}); 
+0

아니요,/\ b/there는 사용할 수 없습니다 : – kangax

+3

그리고'parseInt'를 이미 사용하고 있다면'radix' (즉'10')를 제공하는 데 도움이됩니다. '08'을 '0'으로 번역하지 않으려 고합니다. – kangax

+3

@nickf입니다. 클래스 값이 공백으로 구분되고 경계가 "foo-bar baz"의 "foo"와 일치하기 때문에 그렇습니다. 그것은 꽤 흔한 실수입니다. 나는 사람들이이 함정에 빠져서 적절한 -'(? : \\ s + | ^)'+ className + 대신에 "className +"\ b "'를 사용하는 수십개의 hasClassName 구현을 보았다. (? : \\ s + | $)'. – kangax

0
var classes = $('input').attr('class'); 
var myNum = ''; 
for(var i=0;i<classes.length;i++){ 
    if(classes[i].match(/^charLimit_.*$/){ 
     myNum = classes[i].split('_')[1]; 
    } 
} 

뭔가, 일 것이다 이것은 좀 말 inkedmn처럼

$('[class*=charLimit_]').attr("class").match(/(?:\s|^)charLimit_(\d+)/)[1]; 
+0

:

var test = $('[class*=owner]').attr('class').split(' '); for(i in test){ if(test[i].indexOf('post-sign') !== false){ test = test[i].split('-'); // replace this with a return console.log(test[1]); break; } } 

그리고 하나는 그가 함께 할하려고하는 코드로 작동 할 수 = "30 lastNameValidation"... 스크립트를 사용해 보았는데 경기가 끝난 후 ")"이 누락되었습니다. 또한 클래스 변수는 문자열이 아니라 배열로 끝납니다. – Mottie

+0

그게 할 : class [i] .match (/^charLimit _ (\\ d +) (\\ s +) /)? (매우 좋지 않은 정규식) – SeanJA

2

단순히 모르고있어 것을 그 일을 어떤 jQuery를 마법 방법이없는 한 그런

+0

정확하고 간단하지만 jQuery 스타일 가이드는 "test"와 "exec"를 선호하여 "match"를 피한다. http://docs.jquery.com/JQuery_Core_Style_Guidelines –

+0

@Gaius Interesting을 참조하십시오. 나는이 경우'exec '가 약간 더 빠를 것이라고 생각한다. – kangax

+0

attr ("class") 다음에 [0]을 제거하면이 대답이 나에게 완벽하게 작용합니다. – Mottie

1

이는 (적어도 유래에) 작업이 나타납니다 :이 myNum에 끝낼 것

var test = $('[class*=charLimit_]').attr('class').split(' '); 
for(i in test){ 
    if(test[i].indexOf('charLimit_') !== false){ 
     test = test[i].split('_'); 
     // replace this with a return if it is in a function 
     console.log(test[1]); 
     break; 
    } 
} 
+0

가끔 문자열 함수를 과도하게 사용한다고 생각합니다 ... – SeanJA

+0

이 질문에 어떻게 대답합니까? – nickf

+0

단어 '부호'를 반환합니다. . 그의 질문에 '30'과 동등합니다. – SeanJA

관련 문제