图像和文本查询

An image and text query

提问人:Joshxtothe4 提问时间:12/2/2008 最后编辑:P.S.Joshxtothe4 更新时间:9/22/2017 访问量:444

问:

我这里有一个非常简单的html页面:

http://www.nomorepasting.com/getpaste.php?pasteid=22407

我的页面上有 4 层。这样做的原因是它是一个更复杂的网站的框架,我已经简化了它来问我的问题。基本上,我希望能够单击第 2 层中的不同链接并更改第 1 层中的图像,但是我发现这样做的方法:

<script type="text/javascript"><!--

function sbox(boxName,xname) {

    theBox = document.getElementById(boxName);

theBox.className = xname;



}

//-->

</script>

导致文本 nto 消失,这是我需要的,以及一种单击并用文本替换任何图像的方法。我找到了替代的 javascript 代码,但无法将其应用于我的 html 页面。

<script type="text/javascript">
function toggleImg(myid) {
  objtxt = document.getElementById(myid);
  objimg = document.getElementById(myid+'_img');

  if( objtxt.style.display == 'block' ) { // Show image, hide text
    objtxt.style.display = 'none';
    objimg.style.display = 'block';
  } else { // Hide image, show text
    objimg.style.display = 'none';
    objtxt.style.display = 'block';
  }

}
</script>

在不更改页面设计的情况下执行此操作的最简单方法是什么?注意:我不想使用框架,我想了解这是如何完成的,并为自己做。

我的另一个问题是关于图层是否应该取代表格:当可以使用 css 代替时,使用表格总是不好吗?使用图层制作行和列等效项只是为了格式化文本数据,而不是网站结构,是否容易?

JavaScript HTML CSS

评论

0赞 TravisO 12/2/2008
双倍间距会引发问题,如果没有它,我们真的可以做到。
0赞 biozinc 12/2/2008
请考虑将代码作为示例页面发布到其他位置,并在此处发布相关代码片段。你可能会有更多的人愿意看一看。

答:

1赞 TravisO 12/2/2008 #1

表格用于表格数据(想想 Excel)。如果要显示数据网格,请使用表。当涉及到页面lyouts时,使用CSS定位。

此外,强迫性地使用 DIV 并不是使用 CSS 的最佳方式。养成将所有内容都包含在 DIV 中的习惯是一种被称为“div mania”的做法,您可以在 Google 上搜索它不好的原因。

评论

0赞 12/2/2008
你说的div狂热是什么意思?有一个主 div 能够包含所有内容难道没有用吗?
0赞 Carl 12/2/2008 #2

好吧,首先,在设置背景图像时,无论您将 Z 索引设置得有多高,它都不会隐藏 DIV 中的文本。它只是不起作用。一种解决方案是将内部文本包装在一个 span 中,并在希望显示 div 的背景图像时隐藏 span。但是,从你的问题来看,你不想改变你的html结构,但是,我相信你必须这样做才能得到你想要的东西。

示例代码:

<html>
    <head>
        <style type="text/css">
            .class1{color:#000;}
            .class2{color:#00f;}
            .class3{color:#0f0;}
            .class4{color:#f00; background-image:url('someimage.jpg');}
        </style>
    </head>
    <body>
        <script type="text/javascript">
            function sbox(divid, classname)
            {
                document.getElementById(divid).className=classname;
                if(document.getElementById(divid+"_text")!=null)
                    document.getElementById(divid+"_text").style.display="none";
            }
        </script>
        <div>
            <a href="#" onclick="sbox('div1','class2');return false;">Test Div1, Class2(blue)</a><br/>
            <a href="#" onclick="sbox('div1','class3'); return false;">Test Div1, Class3(green)</a><br/>
            <a href="#" onclick="sbox('div1','class4');return false;">Test Div1, Class4(red)</a>
        </div>
        <div id="div1" class="class1"><span id="div1_text">Blah blah blah</span></div>
    </body>
</html>

我同意 TravisO 的观点,HTML 表格应该用于表格数据,而不是作为布局机制。当你有一个庞大的表/行/等层次结构时,表格也有一些CSS的奇怪之处。

评论

0赞 12/2/2008
感谢您的回复。我是否只是将类改回 1 来获取文本,并且仍然依赖其他类的背景图像来显示它们?如果我理解不正确,我深表歉意。有什么比将图像作为背景更好的方法呢?
0赞 Carl 12/2/2008 #3

(回应 Joshxtothe4 的评论...我需要更多的空间来回应)

不幸的是,将类更改回 class1 将不会再次显示文本。我给出的代码将始终隐藏文本,如果它在跨度中找到它。您可以执行如下操作,并添加另一个 CSS 语句,如果使用 class4,该语句将隐藏跨度。然后你就不必在 javascript 中使用该代码了。可能是一个更清洁的解决方案:

<html>
    <head>
        <style type="text/css">
                .class1{color:#000;}
                .class2{color:#00f;}
                .class3{color:#0f0;}
                .class4{color:#f00; background-image:url('someimage.jpg');}
        .class4 span { display: none;}
        </style>
    </head>
    <body>
        <script type="text/javascript">
                function sbox(divid, classname)
                {
                        document.getElementById(divid).className=classname;
                 }
        </script>
        <div>
        <a href="#" onclick="sbox('div1','class1');return false;">Reset</a><br/>
                <a href="#" onclick="sbox('div1','class2');return false;">Test Div1, Class2(blue)</a><br/>
                <a href="#" onclick="sbox('div1','class3'); return false;">Test Div1, Class3(green)</a><br/>
                <a href="#" onclick="sbox('div1','class4');return false;">Test Div1, Class4(red)</a>
        </div>
        <div id="div1" class="class1"><span id="div1_text">Blah blah blah</span></div>
    </body>
</html>

就将图像作为背景而言,这可能是您最好的选择。唯一的问题是设置背景图像不会隐藏前景文本。你总是必须以某种方式隐藏该文本

评论

0赞 12/2/2008
非常感谢您的回复!不过,我仍在努力理解它。如果使用类 4,或者实际上使用任何带有背景图像的类,我将如何添加语句来隐藏文本?
0赞 Carl 12/2/2008
如果使用 class4,则 CSS 样式 .class4 span{display:none;} 会隐藏 span 内的内部文本。如果使用背景图像,隐藏文本是一个更困难的解决方案,我目前没有答案。但是,我想这将是一个 javascript 解决方案。
0赞 12/3/2008
从理论上讲,我可以有很多带有背景图像的类和一个没有背景图像的类 4,这难道不能完美工作吗?
0赞 Carl 12/3/2008
我想我不明白你的意思。