Javascript 替换<;td>;a<;表>;不改变或具有固定的高度/宽度

Javascript 替换<;td>;a<;表>;不改变或具有固定的高度/宽度,javascript,jquery,Javascript,Jquery,我希望保持元素的大小相同,并在元素中替换文本。文本和备选文本可以是任意长度。目前,我通过猜测文本在元素中的长度来截断备用文本(但不要考虑原始文本可能有多行)。如果所有内容都是一行,并且用户不调整窗口大小,那么它可以正常工作$(窗口)。调整大小(findCELLSIZE)触发太频繁(每次我替换元素时),所以我没有使用它来重新计算宽度和高度 我将HTML(简化)设置为: 第一 第二 第三 废话 废话 废话 使用简化的jQuery/javascript作为: var DESCRIPTIONheig

我希望保持元素的大小相同,并在元素中替换文本。文本和备选文本可以是任意长度。目前,我通过猜测文本在元素中的长度来截断备用文本(但不要考虑原始文本可能有多行)。如果所有内容都是一行,并且用户不调整窗口大小,那么它可以正常工作<代码>$(窗口)。调整大小(findCELLSIZE)触发太频繁(每次我替换元素时),所以我没有使用它来重新计算宽度和高度

我将HTML(简化)设置为:


第一
第二
第三
废话
废话
废话
使用简化的jQuery/javascript作为:

var DESCRIPTIONheight = [];
var DESCRIPTIONwidth = 0;
function findCELLSIZE () {
   $("#main tbody tr").each(function() { 
       var thatwidth = $(this).find('td:nth-child(2)').width();
       if (thatwidth >= DESCRIPTIONwidth) { DESCRIPTIONwidth = thatwidth+1; }
   });
   $(".special").each(function () {
       $(this).closest('tr').height('');
       DESCRIPTIONheight.push($(this).height()+1);
   });
}
findCELLSIZE();
//$(window).resize(findCELLSIZE);
function flashEXPRESS() {
    $(".special").each(function (index) {
      var next = $(this).data('text').split(/,\.,/)[0];
      var temp = '';
      if (next != $(this).data('text')) {
         temp = $(this).data('text').split(/^(.+?),\.,/)[0] +',.,';
      }
      temp = temp + $(this).html();
      var mytextlength = next.match(/>(.*?)<\/span>$/i);
      if(mytextlength) {
         if (mytextlength[1].length*7 > DESCRIPTIONwidth) { 
           mytextlength[1] = mytextlength[1].substring(0,Math.floor(DESCRIPTIONwidth/7));
           next = next.replace(/>(.*?)<\/span>$/i,'>'+mytextlength[1]+'</span>');
         }
      }
      $(this).html(next);
      $(this).width(DESCRIPTIONwidth);
      $(this).data('text', temp);
      $(this).closest('tr').height(DESCRIPTIONheight[index]);
   });
}
var flashEXPRESSid = 0;
flashEXPRESSid = setInterval(flashEXPRESS,1000);
var DESCRIPTIONheight=[];
变量描述宽度=0;
函数findCELLSIZE(){
$(“#main tbody tr”).each(function(){
var thatwidth=$(this.find('td:nth child(2)')).width();
如果(thatwidth>=DESCRIPTIONwidth){DESCRIPTIONwidth=thatwidth+1;}
});
$(“.special”)。每个(函数(){
$(此).最近('tr')。高度('');
DESCRIPTIONheight.push($(this.height()+1);
});
}
findCELLSIZE();
//$(窗口)。调整大小(findCELLSIZE);
函数flashXPress(){
$(“.special”)。每个(函数(索引){
var next=$(this).data('text').split(/,\,/)[0];
var temp=“”;
if(next!=$(this).data('text')){
temp=$(this).data('text').split(/^(+?),\,/)[0]+',';
}
temp=temp+$(this.html();
var mytextlength=next.match(/>(.*)$/i);
如果(mytextlength){
如果(mytextlength[1].length*7>DESCRIPTIONwidth){
mytextlength[1]=mytextlength[1]。子字符串(0,数学层(DESCRIPTIONwidth/7));
next=next.replace(/>(.*?$/i,'>'+mytextlength[1]+'');
}
}
$(this.html(next);
$(此).width(DESCRIPTIONwidth);
$(此).data('text',temp);
$(this).closest('tr').height(DESCRIPTIONheight[index]);
});
}
var flashxpressid=0;
FlashXPressId=设置间隔(FlashXPress,1000);

我的代码在IE8中运行,而不是在Firefox 15中运行(jQuery编写html5数据属性肯定有问题)

CSS建议没有一个完全有效(实际的表更复杂:可能是表、IE8,或者两者都有)。解决方案是不更改元素,而是使元素具有相同的大小,位置具有更大的z索引。为了与浏览器无关,我必须弄清楚为什么jQuery位置和大小没有在不同的浏览器中标准化…

我已经读了三遍这个问题,但仍然不能完全确定您想要完成什么。我想在不改变元素原始大小的情况下,在元素中替换内容。我将备用内容存储在由“,,”分隔的数据文本属性中。我目前的解决方案很脆弱……是的。为什么要将替代文本存储在数据属性中?您不能将它存储在javascript中的某个地方吗?您不改变td的原始尺寸是什么意思?您不能用一些简单的css完成这一点吗?该表很大,动态,并且当前显示的是需要的。此特定元素将扩展到窗口的限制。将数据存储在不同的庄园会有什么帮助?我没有看到CSS的解决方案。除非有CSS不允许表在呈现后进行维度更改,或者有一种方法可以让元素只切断多余的文本(就像Excel在单元格中有太多文本时所做的那样)。像这样?
var DESCRIPTIONheight = [];
var DESCRIPTIONwidth = 0;
function findCELLSIZE () {
   $("#main tbody tr").each(function() { 
       var thatwidth = $(this).find('td:nth-child(2)').width();
       if (thatwidth >= DESCRIPTIONwidth) { DESCRIPTIONwidth = thatwidth+1; }
   });
   $(".special").each(function () {
       $(this).closest('tr').height('');
       DESCRIPTIONheight.push($(this).height()+1);
   });
}
findCELLSIZE();
//$(window).resize(findCELLSIZE);
function flashEXPRESS() {
    $(".special").each(function (index) {
      var next = $(this).data('text').split(/,\.,/)[0];
      var temp = '';
      if (next != $(this).data('text')) {
         temp = $(this).data('text').split(/^(.+?),\.,/)[0] +',.,';
      }
      temp = temp + $(this).html();
      var mytextlength = next.match(/>(.*?)<\/span>$/i);
      if(mytextlength) {
         if (mytextlength[1].length*7 > DESCRIPTIONwidth) { 
           mytextlength[1] = mytextlength[1].substring(0,Math.floor(DESCRIPTIONwidth/7));
           next = next.replace(/>(.*?)<\/span>$/i,'>'+mytextlength[1]+'</span>');
         }
      }
      $(this).html(next);
      $(this).width(DESCRIPTIONwidth);
      $(this).data('text', temp);
      $(this).closest('tr').height(DESCRIPTIONheight[index]);
   });
}
var flashEXPRESSid = 0;
flashEXPRESSid = setInterval(flashEXPRESS,1000);