2014-05-22 2 views
0

그 안에 여러 개의 텍스트 요소가있는 svg 파일로 작업하고 있습니다. 텍스트 요소는 모두 숫자입니다. 값 목록을 가져 와서 다음 코드 줄을 사용하여 배열에 넣을 수 있습니다.svg 텍스트 요소 배열에서 javascript의 indexOf 사용

var fretdata = document.getElementById("fretinformation").getElementsByTagName("text"); 

나는 같은 [0].textContent으로 인덱스에 의해 액세스를 또한 배열 요소를 .length 속성을 액세스 할 수있게되었습니다. 그러나 배열에서 .indexOf() 함수를 사용하려고하면 객체 (내 배열)가 indexOf의 속성이나 메서드를 지원하지 않는다는 오류 메시지가 나타납니다.

각 루프가 특정 값의 유무를 확인하면서 배열을 반복 실행하도록 for 루프를 설정할 수 있습니다. 나는 indexOf 기능의 단순성과 함께 무언가가 어레이 안에 존재하는지 그리고 존재하는지 여부를 알려준다. S을 svg 텍스트 요소 배열로 작업 할 수 있습니까? 아니면 루프와 플래그를 사용하지 않아도되는 비슷한 대안이 있습니까?

나는 문자 배열이 아니라 문자열 배열을 가지고 있다는 사실에 문제가 있다고 생각한다. 하지만 직접 루프 작품에 텍스트 요소의 textContent

var fretdata = document.getElementById("fretinformation").getElementsByTagName("text"); 
    //var fretdata = document.getElementById("fretinformation").getElementsByTagName("text").textcontent; 

    //18th fret is the upper fret limit 
    //0 fret (open string) is the lower fret limit 

    //var zerolocation=fretdata.indexOf("0"); 
for (fd=0;fd<fretdata.length;fd++){ 
     if(fretdata[fd].textContent=="0"){ 
      document.getElementById("downkey").setAttribute("onclick",null); 
      document.getElementById("downkey").getElementsByTagName("polygon")[0].style.fill="#D3D3D3"; 
     } 
} 

순회의 배열을 얻을하는 방법을 모르겠어요. 두 줄은 .indexOf를 사용하여 주석 처리하지 않았습니다. 감사합니다, - 크리스토퍼

답변

1

정말 옵션이지만, 당신이 그것을 좋아하지 않는 경우에, 당신이 더 많은 옵션이 설정에 따라있을 수 있습니다

은 다음 코드는 map 기능 (compatibility here을 확인이 필요, 그것은 기본적으로 + IE9가 필요합니다) 및 슬라이스 함수 호환성 (IE9 +와 동일).

var fretdata = document.getElementById("fretinformation").getElementsByTagName("text"); 
alert([].slice.call(fretdata).map(function(o) { return o.textContent; }).indexOf("1")); 

다른 하나는 jQuery가 필요하며, 많은 것들을 처리합니다.

alert($("#fretinformation > text").filter(function() { return $(this).text() === "1"; }).length); 
1

가지고있는 것은 배열이 아니며, nodeList입니다.

노드 목록은 length이고 배열과 비슷하지만 indexOf, 등과 같은 배열 메서드는 nodeLists에서 작동하지 않습니다.

는이

var array = Array.prototype.slice.call(fretdata); 

같은 배열에 노드 목록을 변환 할 수 있지만 경우에 당신은 정말, 대신 반복에 충실해야하지 않아야합니다. 요소를 반복하는

+0

감사합니다. 한 번 반복을 끝내고 각 textContent 값을 배열에 밀어 넣었으므로 indexOf를 사용하여 값이 배열에 없는지 쉽게 확인할 수 있습니다. –