掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 736|回复: 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 编辑
    - j1 M6 J6 t" W* \7 |6 l
    7 e: Y9 \" P' _+ M<span class="word">/ K4 ]1 [* u4 M
            very <span class="red"> neat </span>  and clean
    ) F, k% `2 Y1 v6 D2 ?: v        <span class="chn">整洁的, <span class="bold" 干净</span>的</span>
    & u3 k5 }* r5 r" H</span> # m* O( r/ `4 a$ o% t  K$ x6 F

    - u7 ]" j8 u- o每个词头中英释义在一个span.word标签中。1 G* t3 m7 D/ F
    里面的全部中文释义用仅一个span.chn标签围绕,span.chn标签中可以有子标签如例中span.bold。其余部分是英文释义。英文释义的文本也可以有各种样式修饰如例中red样式,但英文释义绝对不会出现在span.chn中。
    * g6 u2 y1 O: ?1 T  o8 w
    - x5 u% V4 Q) [" D5 m+ J4 n4 c如何用css,javascript,jquery等方法,将英文部分隐藏,仅显示中文部分?即,最后转换完的效果:( i$ Q/ j% \: l) ?3 d8 q* ^/ D
    0 h% b- e# }0 n4 b6 A! `
    <span class="word">
    0 i; C% o+ J, U: X0 ~/ P7 X        <span class="chn">整洁的, <span class="bold" 干净</span> 的</span># g- B& B! g( i+ f* l# K
    </span> 2 u- p! X; U% E; S8 s

    . a" M, _$ N/ Y7 b因为英文释义部分没有标签围绕,貌似不大好处理。我用jquery的 addclass方法在最外层span动态加一个事先定义的样式 .hide {display: none;},再在中文释义标签上动态加一个内联样式 display:inline。这样中文释义样式的两个设置是冲突的,一个是inline即显示,一个是从外层span.hide继承的none不显示,此时根据CSS冲突解决机制应该是内联样式设置优先,中文释义最终将不会被隐藏,被隐藏的只有英文部分,效果就达到了。4 `: y- ~% O& U  S& R
    : Y4 h+ w# O8 `  k* v1 r
    哪知,上词典软件一试根本不是这么回事,中文和英文全部都被隐藏了。7 x4 ?7 _& A3 c1 }
    / s! J. J" y6 f' d7 T! S% c+ c" q
    $("span.word").addClass("hide");
    $ B' e2 N3 R: S6 S; t7 d$("span.chn").css("display","inline");' p9 d' m4 N3 L. T0 X

    9 T! }1 m8 q" C: G) y2 M; u哪位前辈指点一下,谢谢!
    $ C; N) {. b% e. u, {8 T, g8 ^% e0 ?! {( _
  • TA的每日心情

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

    [LV.8]以坛为家I

    发表于 2020-2-13 00:05:29 | 显示全部楼层
    本帖最后由 mtaa 于 2020-2-13 00:12 编辑 $ B( ^' r) E3 e% C8 ]9 v

    " v- v4 b: s3 G& t- F7 U中英混合的span.word标签下,有4个子节点,分别是text, span.red, text, span.chn。你可以通过el.childNodes遍历删掉不需要的节点就好了,el是span.word,删除节点用el.removeChild(el.childNodes[0])。担心删错的话,可以先确定子节点的nodeType和className。
    ! f; {3 {' K! [- e2 ~+ [1 U- ^$ {! v& g
  • TA的每日心情

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

    [LV.3]偶尔看看II

     楼主| 发表于 2020-2-13 15:19:17 | 显示全部楼层
    mtaa 发表于 2020-2-13 00:056 e0 T* X7 V- \) Y9 f
    中英混合的span.word标签下,有4个子节点,分别是text, span.red, text, span.chn。你可以通过el.childNode ...
    & `) o" O& ^6 D8 L; s% |* o/ i' }
    谢谢指点!但是我的本意只是临时切换到仅显示中文而非永久性删除英文。象您这种方法删除了英文节点只显示中文之后,如果想要再切换回原先中英同在的状态怎么弄呢?
    6 E, k5 ], P/ j* \9 Y! p* R我在想,如果英文里没有再去嵌套混杂任何标记的话,本可用如下方法:
    ) \3 Q0 N$ X* M$('span.word').contents().filter(function(){return this.nodeType == Node.TEXT_NODE;})  过滤出英文,然后强行给英文加上一个临时标签且让这个标签display:none。这样如果今后要切换回来只要将刚加上的标签删除就可以。( C8 {& |! n7 }) `9 z, j; @
    无奈,英文中还混有其他标记,不全是Node.TEXT_NODE这个类型。
    6 _4 H. K. `5 D9 d% |4 B5 J, A难啊!
  • TA的每日心情

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

    [LV.8]以坛为家I

    发表于 2020-2-13 19:08:52 | 显示全部楼层
    本帖最后由 mtaa 于 2020-2-14 04:23 编辑 ( S" ?3 u" J/ j/ ?
    lbhl 发表于 2020-2-13 15:19
    4 n  v( A( E0 k: ]谢谢指点!但是我的本意只是临时切换到仅显示中文而非永久性删除英文。象您这种方法删除了英文节点只显示 ...

    ; v+ I2 ~* w3 g( v( R+ k; V2 ?% t可以遍历el.childNodes,通过判断span.chn区分节点类型,用三个array分别存英文,中文,英文节点的字符串,最后给英文array加上临时标签,把所有节点拼字符串一起放回innerHTML里。; d7 l1 U$ t+ g5 ^
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-4-24 15:32 , Processed in 0.049752 second(s), 9 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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