2011-01-18 4 views
2

IBM Cognos (BI 소프트웨어)에서 작동하는 javascript 태그 클라우드를 얻기 위해 자습서를 수정하거나 코드를 수정했습니다.자바 스크립트 태그 IBM Cognos와 Cloud - IE가 null이거나 객체가 아닙니다.

"메시지 : '1'null의 경우, 또는하지 개체"

이 존재하는 225 코드 줄 태그 클라우드 내가 오류가 파이어 폭스에 있지만 Internet Explorer에서 잘 작동 :

<script> 
// JavaScript Document 
// ==================================== 
// params that might need changin. 
// DON'T forget to include a drill url in the href section below (see ###) if you want this report to be drillable 
var delimit = "|"; 
var subdelimit = "[]"; // change this as needed (ex: Smith, Michael[]$500,000.00|) 
var labelColumnNumber = 0; // first column is 0 
var valueColumnNumber = 1; 
var columnCount = 2; // how many columns are there in the list? 
// ==================================== 

/* 
function formatCurrency(num) { 
num = num.toString().replace(/\$|\,/g,''); 
if(isNaN(num)) 
num = "0"; 
sign = (num == (num = Math.abs(num))); 
num = Math.floor(num*100+0.50000000001); 
cents = num%100; 
num = Math.floor(num/100).toString(); 
if(cents<10) 
cents = "0" + cents; 
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) 
num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3)); 
return (((sign)?'':'-') + '$' + num + '.' + cents); 
} 
*/ 
function formatCurrency(num) { 
num = num.toString().replace(/\$|\,/g,''); 
if(isNaN(num)) 
num = "0"; 
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) 
num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3)); 
return (num); 
} 

function filterNum(str) { 
re = /\$|,|@|#|~|`|\%|\*|\^|\&|\(|\)|\+|\=|\[|\-|\_|\]|\[|\}|\{|\;|\:|\'|\"|\<|\>|\?|\||\\|\!|\$|/g; 
// remove special characters like "$" and "," etc... 
return str.replace(re, ""); 
} 


table = document.getElementById("dg"); 

if (table.style.visibility != 'hidden'){ //only for visible 
/*alert('Visible');*/ 

tags = document.getElementById("dg").getElementsByTagName("SPAN"); 


txt = ""; 
var newText = "a"; 
    for (var i=columnCount; i<tags.length; i++) { 
/* 
valu = filterNum(tags[i+valueColumnNumber].innerHTML); 
txt += valu; 
txt += subdelimit+tags[i+labelColumnNumber].innerHTML+delimit; 
i = i+columnCount; 
*/ 
     if(i%2!=0){ 
      var newValue = filterNum(tags[i].innerHTML); 
     }else var newName =tags[i].innerHTML; 

       if((i>2) & (i%2!=0)){ 
        newText = newText+newValue+subdelimit+newName+delimit; 
         if(typeof newText != 'undefined'){ 
          txt = newText; 
          txt = txt.substr(9); 
        /*  alert(txt);*/ 
         } 
       } 
    } 

}/*else alert ('Hidden');*/ 

function getFontSize(min,max,val) { 
return Math.round((150.0*(1.0+(1.5*val-max/2)/max))); 
} 

function generateCloud(txt) { 
//var txt = "48.1[]Google|28.1[]Yahoo!|10.5[]Live/MSN|4.9[]Ask|5[]AOL"; 
var logarithmic = false; 
var lines = txt.split(delimit); 
var min = 10000000000; 
var max = 0; 
for(var i=0;i<lines.length;i++) { 
var line = lines[i]; 
var data = line.split(subdelimit); 
if(data.length != 2) { 
lines.splice(i,1); 
continue; 
} 
data[0] = parseFloat(data[0]); 
lines[i] = data; 
if(data[0] > max) 
max = data[0]; 
if(data[0] < min) 
min = data[0]; 
}lines.sort(function (a,b) { 
var A = a[1].toLowerCase(); 
var B = b[1].toLowerCase(); 
return A>B ? 1 : (A<B ? -1 : 0); 
}); 

var html = "<style type='text/css'>#jscloud a:hover { text-decoration: underline; }</style> <div id='jscloud'>"; 
if(logarithmic) { 
max = Math.log(max); 
min = Math.log(min); 
} 
for(var i=0;i<lines.length;i++) { 
var val = lines[i][0]; 
if(logarithmic) val = Math.log(val); 
var fsize = getFontSize(min,max,val); 
dollar = formatCurrency(lines[i][0]); 
html += " <a href='###Some drillthrough url which includes the param "+lines[i][1]+"' style='font-size:"+fsize+"%;' title='"+dollar+"'>"+lines[i][1]+"</a> "; 
} 
html += "</div>"; 
var cloud = document.getElementById("cloud"); 
cloud.innerHTML = html; 
var cloudhtml = document.getElementById("cloudhtml"); 
cloudhtml.value = html; 
} 
function setClass(layer,cls) { 
layer.setAttribute("class",cls); 
layer.setAttribute("className",cls); 
} 
function show(display) { 
var cloud = document.getElementById("cloud"); 
var cloudhtml = document.getElementById("cloudhtml");if(display == "cloud") { 
setClass(cloud,"visible"); 
setClass(cloudhtml,"hidden"); 
} 
else if(display == "html") { 
setClass(cloud,"hidden"); 
setClass(cloudhtml,"visible"); 
} 
} 
generateCloud(txt); 
</script> 

모든 시간을 :

var B = b[1].toLowerCase(); 

나는 내가 본 그러나 이것은 다음과 제대로 작동 코드의 나머지 부분이기 때문에 얻을 수 없었다 다양한 솔루션을 시도 엘프 또는 설명을 많이 듣습니다.

답변

0

죄송 합니다만 []와 b []가 정의 된 곳을 보지 못했습니다. Firefox와 IE는 정의되지 않은 배열의 문제와 다르게 반응 할 수 있습니다.

+0

신경 쓰지 마라. 나는 지금 그것을 보았다. a/b가 한 문자 일 수있는 경우가 있습니까? a [1]과 b [1]은 문자열의 두 번째 문자를 얻게 될 것이고 왜 내가 원하는지를 보지 못할 것입니다. 한 글자의 "라인"을 정렬하면, 다른 브라우저에서 다르게 할 수 있습니다. – rossdavidh

관련 문제