掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 741|回复: 3

[求助] 如何用CSS JS隐藏标签中的英文部分只保留中文?

[复制链接]
  • TA的每日心情

    2019-9-23 23:38
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2020-2-12 21:09:33 | 显示全部楼层 |阅读模式
    本帖最后由 lbhl 于 2020-2-12 21:10 编辑
    0 I# k$ \4 n9 K: O- u7 a2 f
    # w7 Z$ N0 J( _6 R( M/ x<span class="word">
    0 {. K+ s: r* i3 X        very <span class="red"> neat </span>  and clean
    1 K" V0 k6 E0 r& y% S. L1 l        <span class="chn">整洁的, <span class="bold" 干净</span>的</span>
    " n2 |8 R& U2 ?* g( l$ M  f</span>
    2 V; g) m: w. g  f- @! j& W  V! A, m7 W
    4 D# i" z, q+ |: u2 U$ \每个词头中英释义在一个span.word标签中。
    - A- F+ p$ L) P2 I2 z) \* r0 U/ X里面的全部中文释义用仅一个span.chn标签围绕,span.chn标签中可以有子标签如例中span.bold。其余部分是英文释义。英文释义的文本也可以有各种样式修饰如例中red样式,但英文释义绝对不会出现在span.chn中。
    3 h4 ^% c. ?8 N. g! \: Z  C
      y/ }1 B1 p! H* j" {9 b; C) @如何用css,javascript,jquery等方法,将英文部分隐藏,仅显示中文部分?即,最后转换完的效果:$ O/ f* G0 U+ T, T  l* ?; G, Z

      Z3 d) w2 V1 W! k" D2 m$ j  o<span class="word">
    8 ~" H8 g; C) K8 e/ H6 z4 @  E        <span class="chn">整洁的, <span class="bold" 干净</span> 的</span>
    9 T$ T9 y: Q* f! ]9 W/ g! y</span> 5 W5 U% P8 W, ]6 m* ~5 g4 E7 \

    + e: y3 }" y+ Z6 A$ s' \' {因为英文释义部分没有标签围绕,貌似不大好处理。我用jquery的 addclass方法在最外层span动态加一个事先定义的样式 .hide {display: none;},再在中文释义标签上动态加一个内联样式 display:inline。这样中文释义样式的两个设置是冲突的,一个是inline即显示,一个是从外层span.hide继承的none不显示,此时根据CSS冲突解决机制应该是内联样式设置优先,中文释义最终将不会被隐藏,被隐藏的只有英文部分,效果就达到了。9 n2 m& s5 t: \8 `) h

    6 e+ g, C: i1 u0 a9 K4 e  c哪知,上词典软件一试根本不是这么回事,中文和英文全部都被隐藏了。
    * p: P3 E, G  E: y, e' C- f3 S8 i0 O2 g
    $("span.word").addClass("hide");
    ! l; \4 _* M4 [$("span.chn").css("display","inline");9 q/ x% o; q$ s6 B

    7 L& i% l& V4 {哪位前辈指点一下,谢谢!" b( ]; I; _% l: Y" r# ~

    ' X5 K/ i% M6 ]1 h+ |7 u
  • TA的每日心情

    2023-3-29 00:54
  • 签到天数: 344 天

    [LV.8]以坛为家I

    发表于 2020-2-13 00:05:29 | 显示全部楼层
    本帖最后由 mtaa 于 2020-2-13 00:12 编辑
    2 K1 C' z. n% J6 I+ C) h& P; v. F. t3 N8 U! h: b
    中英混合的span.word标签下,有4个子节点,分别是text, span.red, text, span.chn。你可以通过el.childNodes遍历删掉不需要的节点就好了,el是span.word,删除节点用el.removeChild(el.childNodes[0])。担心删错的话,可以先确定子节点的nodeType和className。
    $ \9 F* |& T1 I1 c) m
    % w1 ]: V% K  H# e+ n! Q
  • TA的每日心情

    2019-9-23 23:38
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2020-2-13 15:19:17 | 显示全部楼层
    mtaa 发表于 2020-2-13 00:05: w. Z* }$ o: d! m
    中英混合的span.word标签下,有4个子节点,分别是text, span.red, text, span.chn。你可以通过el.childNode ...

    ' x, t' t" J; A1 ^3 Y, o谢谢指点!但是我的本意只是临时切换到仅显示中文而非永久性删除英文。象您这种方法删除了英文节点只显示中文之后,如果想要再切换回原先中英同在的状态怎么弄呢?
    ' \: C2 j, _0 l" }/ G" Z我在想,如果英文里没有再去嵌套混杂任何标记的话,本可用如下方法:
    0 H/ A. z* {2 E7 Y$('span.word').contents().filter(function(){return this.nodeType == Node.TEXT_NODE;})  过滤出英文,然后强行给英文加上一个临时标签且让这个标签display:none。这样如果今后要切换回来只要将刚加上的标签删除就可以。
    3 D  Y/ o: H% _) i) C; P无奈,英文中还混有其他标记,不全是Node.TEXT_NODE这个类型。3 v- d5 b% c: }
    难啊!
  • TA的每日心情

    2023-3-29 00:54
  • 签到天数: 344 天

    [LV.8]以坛为家I

    发表于 2020-2-13 19:08:52 | 显示全部楼层
    本帖最后由 mtaa 于 2020-2-14 04:23 编辑 6 m! M- P) y/ `' Z2 ~
    lbhl 发表于 2020-2-13 15:19
    4 t2 i! f6 Y) Y, k' _2 H3 u) `' j5 M谢谢指点!但是我的本意只是临时切换到仅显示中文而非永久性删除英文。象您这种方法删除了英文节点只显示 ...
    . i7 U3 k+ ^  ~
    可以遍历el.childNodes,通过判断span.chn区分节点类型,用三个array分别存英文,中文,英文节点的字符串,最后给英文array加上临时标签,把所有节点拼字符串一起放回innerHTML里。
    ! N8 L; J  g: j) ^
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2024-4-28 21:19 , Processed in 0.038126 second(s), 9 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

    快速回复 返回顶部 返回列表