IBM Cognos 中的 JavaScript 标签云 - IE 为 null 或不是对象

发布于 2024-10-12 05:30:54 字数 4558 浏览 0 评论 0原文

我按照教程/修改了代码以获得在 IBM Cognos(BI 软件)中工作的 javascript 标签云。标签云在 FireFox 中工作正常,但在 Internet Explorer 中我收到错误:

“消息:‘1’为 null 或不是对象”

出现此问题的代码行是 225,即:

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

我尝试了许多不同的解决方案已经看到但无法使其正常工作,其余代码如下:

<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>

非常感谢任何帮助或解释

I followed a tutorial/modified the code to get a javascript tag cloud working in IBM Cognos (BI software). The tag cloud works fine in FireFox but in Internet Explorer I get the error:

"Message: '1' is null or not an object"

The line of code where this is present is 225 which is:

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

I have tried many different solutions that I have seen but have been unable to get this working correctly, the rest of the code is as follows:

<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)?'':'-') + '

Any help or explanations is much appreciated

+ 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>

Any help or explanations is much appreciated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

阳光①夏 2024-10-19 05:30:54

抱歉,我没有看到 a[] 和 b[] 的定义位置,这是在其他地方完成的吗? Firefox 和 IE 对未定义数组问题的响应可能不同。

Sorry, I'm not seeing where a[] and b[] are defined, is this done elsewhere? Firefox and IE may be responding differently to the problem of an undefined array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文