TA的每日心情 | 奋斗 2020-5-22 08:16 |
---|
签到天数: 47 天 [LV.5]常住居民I
|
本帖最后由 baodi 于 2024-10-24 20:03 编辑 ; d. z) a" ?; E' P1 m; b- d' F0 Y
! T9 @0 y8 q0 c/ n. {6 y% V6 {" b
输入搜索的短语,回车触发搜索。 U5 J# R1 \; T
搜索前:- c9 r; V2 {8 }/ m1 G

+ y3 @* K; Q8 M; ^* e2 _* b4 Q0 p$ m/ ?
搜索后:点击即可跳转对应的短语,非常简单快速8 h0 K3 z5 I1 n! ]6 `8 |

. U# R7 Q) S( @; B
4 x. v& W# k" E6 L0 \; H出于查询词典短语的需求,写了一个脚本,用了许久,还挺好用,特此分享。
3 x% {( u* I, x+ e/ a; L# s/ i0 k*但不是加入即用的,需要一点css 选择器样式的了解,才能修改成自己用的词典。
& L5 ^1 R- Q7 R1 h8 t
, [. a* I1 m: o$ y来由:
0 v: ~( F6 }0 A5 N, {! s有些词典并没有给短语一个词条,比如想搜索period of time,就只能先搜索time词条,然后打开软件的页内搜索功能搜索,但在我用的词典内ldoce6有18处出现period of time,那么最糟糕的情况下要切换18次才能找到自己想要的释义。
5 E) p( i8 R8 j! W; R" f. m而使用了我这个脚本,就可以偷懒,搜索“per”,然后就出来2个结果,其中一个就是period of time的条目,点击即达词典对应位置。
, c: Q8 V& a6 M% I( F
& ]$ \; c* x ]3 ?, I6 A2 N- J使用方法:
& V$ c, }$ b5 D" I. E3 O在词典自带的.js为后缀的文件最后,加入以下代码并修改。5 h& R q$ L4 h ~9 b( H
根据对应的词典,需要针对性地修改。
3 N. s# f5 H4 l5 l- B4 t修改代码第42行的const selector = [".phrvbhwd",".lexunit"…
! R- O! D) r& x% @通过电脑平台的goldendict或安卓平台 无限词典app的词典服务器,甚至解包词典。找到对应的短语在词典的样式中对应的css选择器,比如我用的ldoce6中有些短语对应.phrvbhwd这个选择器,有些对应.lexunit这个选择器,等等,修改完成后。
$ d5 j' v, [3 D* K保存.js文件,一般来说软件会自动挂载这个新的.js文件替换词典原版加载的.js文件。
) n5 Z6 R9 [$ S8 P
- [( G! J( r! |6 R6 k网友互助?:因为这玩意要从词典的条目中筛选出对应的css选择器,对于一些朋友可能还是太难,所以希望网友在回复帖子里附上自己使用的词典修改后“完整的”js文件的百度云盘(文件本就不大,百度云盘最稳妥)链接,注意是完整的js文件。然后在这层楼的点评中附上 词典名称+对应楼层,方便其他人检索。$ i; B8 A+ H" X# {! n& Q. A
9 l3 Z' l/ f' V5 T# a
附加:css选择器学习教程:runoob教程3 k, W" E+ P7 N- J6 P7 B
- ]% T5 t) [' e8 |4 U代码:& }9 l2 Z+ R5 _$ j. n: ]1 T/ |: {: F
- /*版本 v1.0*/
$ g7 I- r# R: T$ A3 @# s2 V8 C - function myscript(){
1 W* A& S& U2 u$ l9 g8 x) z - const style = document.createElement("style");
- o7 `% J- @2 l2 H - style.innerText = `4 ?6 j5 Q1 G+ E! g8 y
- /*css样式,可以将这部分样式放到css文件中*/
+ d2 N9 _4 R% H3 ~3 A - .blink_me {
9 i6 B# Z0 }: _' P% r - /*scroll-margin-top: 18px;锚点的配置*/
, j B! w! k1 k$ w" F& O$ c$ y
5 g& F' \7 y$ h" a* B- padding-top: 18px;
9 A, Q: L7 i4 u) Q8 g9 d - margin-top: -18px;& k& @; ~1 `5 M6 d8 U' ?
- ( T7 e9 J& v" d
- animation: blinker 1s linear infinite;
( e7 R" W% S0 ^4 H# @3 \& o& m - }
' g, I; z" Y$ G9 {1 Y$ L - $ I( i& ~4 g! _9 {5 m- q6 V: a
- @keyframes blinker {
$ H3 t, e' s T- G - 50% {& e6 v9 ?( n/ y& d
- opacity: 0;4 P5 F0 z( T. W' u& H8 p
- }
5 A% k% b8 o( H# N$ T" k - } W" ~5 `% Y) f1 X6 t2 _) @/ l' z' F
- input[type="search"] {/ H3 `5 I2 \7 o
- margin: 3px;
4 x0 P2 E, U; B' K6 h% q$ L K# r5 y - }
5 S" G$ {# ?/ ? - #search_result ul{9 ^1 L0 p+ v6 j9 l$ d4 T( C
- margin: 3px 3px;$ F+ q' @5 v6 z) O4 B% T4 Q v. c
- padding: 0;
) c! B* X8 O) Z - }
* c# ]& O8 q$ v+ z - #search_result a{) K' b4 o. T9 u% n3 V- B! e
- font-weight: bold;
@$ g/ r6 h; T$ G2 K% h, R - }5 R! P) R F' ~
- /*css样式-结束*/8 g/ X0 g; O8 S
- `;5 u# k" r" c) r; c) U: g
- document.head.append(style);
, b K% Z( V% N3 k$ b+ \
, Z( d/ _9 `9 X3 V; i- const search_bar = document.createElement('input');
+ d% a/ ]7 \% d0 ^7 d1 o - search_bar.type = 'search';5 u( G; @' z4 H6 ~' f
- search_bar.id = 'search_bar'1 L M2 N9 Y# e B
- search_bar.placeholder = '搜索短语,回车搜索';
& M# P8 {* x1 r3 s9 M3 p/ E - const matched = document.createElement('div');7 W! U4 x ?( N* u2 u* A. i/ M! U
- matched.id = 'search_result';& N5 n2 b1 S4 R
- & ?$ U% N2 e h2 x
- //词典中要搜索的元素对应的class名称,这里是ldoce6词典的短语对应的css选择器,你需要改成你用的词典的短语对应的选择器。0 F: A" k& w* }, f
- const selector = [".phrvbhwd",".lexunit",".lexvar",".propformprep",".propform",".collo",".syn",".relatedwd",".reflex"]; ) @. q$ U7 P( |8 `; N- I: {/ N
- 4 ?% ^6 d! {8 A3 x- W7 k
- const march_nodes = [];
; _( Y, F1 e2 Z& C- @ - for (const sel of selector){
- ]6 e3 ^& B7 ?% S; u - document.querySelectorAll(sel).forEach((e)=>{
4 v9 z- o& F" G - march_nodes.push(e)$ }& Q' B" b) C5 P
- }) g/ k6 \- K3 C
- }
5 Y L5 o& t$ u& y" u9 W - myscript.pos = 1;& j3 H& ]* C9 u4 z5 }+ `
- search_bar.addEventListener('keydown',function(e){' f- x0 g$ B" d0 G" @! w
- if (e.keyCode == 13) {
) U# }; M# k: Z- i( N' q: w - let pos = myscript.pos;! U, T7 Z+ }: g. X0 F
- let matched_html = ''; I8 t; |3 m+ u% ^$ `
- march_nodes.forEach((ele)=>{. o; r$ p0 F/ G* w
- if(ele.innerText.toLocaleLowerCase().indexOf(search_bar.value.toLocaleLowerCase()) === -1){
/ A, Y- N* M3 {: l - return
) v0 W' t, l+ N1 N+ A) N2 ` - };
+ P$ h* D: X# S: N' c. F: \ -
8 ?/ w' |- ^! K4 L; [$ u. z - const a_html = ele.innerText.replace(new RegExp('(' + search_bar.value.trim() + ')', "gi"),'<mark>$1</mark>')
5 e; {) `7 }& k7 m - & G3 ?1 U! ~/ |& V
- if(!ele.id){% f+ q( B: a) ?
- ele.id = 'matched_' + pos++;
( ]( p: b0 U) ?/ F3 m$ U - }- z$ ]5 M9 o( I9 ~' X! p; m0 C
9 K0 Z6 B, W8 a, Y& W- matched_html += `- Y; o7 ^7 @( \$ }. w; I' o( P
- <ul><a href="#${ele.id}">${a_html}</a></ul>
% `. x: [+ m$ X1 e5 ?; @ - `
/ p) [1 R+ ^7 ^, [6 l3 i4 X) w - })# d ?2 R. R+ V% R: u+ n, L! l
- if (matched_html === ''){: ?9 A- @$ `" w6 U# s
- matched_html += `
- \0 o' i" ~& f @# e - <ul><a>无匹配短语</a></ul>
8 k" H6 J$ `; e- G: j2 c% p8 Q3 p0 x - `1 W% K3 \/ P5 g7 C) P
- }9 S; Z. ], _5 }* \# F* b
- myscript.pos = pos; v9 {) M5 n. ^5 U# y5 Z
- matched.innerHTML = matched_html;$ N; S! x0 t- C" g3 E0 X, r3 a
- }0 f6 E" c2 h# A) _
- }); W4 `" A9 H- W p5 q: j
: v7 K* X$ @) Y( @, P$ t0 J4 B- matched.addEventListener('click',function(e){( o2 _$ r" d N. f7 L# f
- const target = (e.target.tagName == 'MARK') ? e.target.parentElement : e.target;
9 L% h( X% Q9 k9 _( P( O - if(target.href.split('#').length <= 1){& x6 ?- Q! @4 O! s, i0 t: [- |% e
- return;& F' D+ W# w3 V( Y2 X/ U8 I Y9 D
- }3 }; U$ s3 J8 v2 o+ H8 E' ~: W
- let t = document.getElementById(target.href.split('#')[1]);
' G! U3 [& R7 `& u1 K - if(t){8 E Y+ h# P+ ~2 q, ~' G
- t.classList.add('blink_me');9 }* b) p& B/ u
- setTimeout(()=>{t.classList.remove('blink_me');},2000)
@2 C9 y2 T; @, [) _7 V @" |. f - }
8 i+ i% J: g3 D - })% |2 O6 c( b h, w# F
- / Z4 D8 P& Y- f7 u# n# F
- if(!document.getElementById('search_result')){; x3 Z9 q, A0 B( W3 [7 ^, }
- document.body.insertBefore(matched,document.body.firstChild)
* F9 G/ M5 ^, ]4 L5 `" h1 x1 c2 L - document.body.insertBefore(search_bar,document.body.firstChild)7 f7 N" u$ u: \, R9 q
- }
4 F. `5 u$ j/ B: ]5 z" ]% e - }
6 h* s, f8 ?- U4 P, B/ A! P$ Q# O - setTimeout(myscript,0);
复制代码 ; V, F$ v; g3 |8 y) I
代码复制不了的话,可以下载附件: i" o3 n, W* g& i+ B
! W9 `+ y% a' Q4 ~: x7 T+ O* _4 ]- F( I3 [; Y
7 P- e5 |. }) v9 _ $ G# K7 d1 E. S+ \+ e; G C
好久没来论坛了。! T$ M# m1 L" }% ^& u8 r3 j+ S
* u- V8 t. }6 q& \; S1 R. ^
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
|