本文目录一览:
- 1、JS实现输入拼音搜索中文列表
- 2、JQuery到底是哪个js文件?
- 3、请问,有一个html文件,网页上显示的都是英文,怎样用JS做汉化?
- 4、spring 国际化 js怎么设置
- 5、如何实现select省市地区三级联动并回显
- 6、JS/jQ中 我要点击一次改变成English 再点变成chinese怎么弄?
JS实现输入拼音搜索中文列表
最近工作中接到了一个需求:一个项目列表,项目名称可能有中文可能有英文,如果是中文的话,需要实现用户输入项目的拼音即可筛选到对应项目的功能。
完成了之后觉得可以在公众号里给大家分享一下,给有需要的人一个参考吧。
项目框架用的是react,所以先creat-react-app
比如create-react-app pinyin
渲染选择框的组件用的是antd的Select组件,所以需要先引入antd,具体引入的方法参照antd官方文档,已经写得很清楚了
以上准备工作做好后,目前的目录结构应该如下图所示:
├── README.md
├── package.json
├── package-lock.json
├── config-overrides.js
├── public
│ ├── favicon.ico
│ ├──index.html
└── manifest.json
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├──logo.svg
│ └── registerServiceWorker.js
现在在src文件夹下新建一个components文件夹,components文件夹中新建一个SelectPinYin文件夹,SelectPinYin文件夹下新建一个index.js和PinYin.js-chinese.js文件
PinYin.js文件中主要放置拼音和各个拼音对应的中文字符串,方便组件调用
export const SimplePinYin = {
py: [
[ 'a','阿啊呵腌吖锕啊呵嗄啊呵啊呵阿啊呵' ],
[ 'ai','哀挨埃唉哎捱锿呆挨癌皑捱矮哎蔼霭嗳爱碍艾唉哎隘暧嗳瑷嗌嫒砹' ],
[ 'an','安谙鞍氨庵桉鹌厂俺铵揞埯案按暗岸黯胺犴' ],
[ 'ang','肮昂盎' ],
[ 'ao','熬凹熬敖嚣嗷鏖鳌翱獒聱螯廒遨袄拗媪奥澳傲懊坳拗骜岙鏊' ],
[ 'ba','八吧巴叭芭扒疤笆粑岜捌八拔跋茇菝魃把靶钯把爸罢霸坝耙灞鲅吧罢' ],
[ 'bai','掰白百摆伯柏佰捭败拜呗稗' ],
[ 'ban','般班搬斑颁扳瘢癍版板阪坂钣舨办半伴扮瓣拌绊' ],
[ 'bang','帮邦浜梆膀榜绑棒膀傍磅谤镑蚌蒡' ],
[ 'bao','包胞炮剥褒苞孢煲龅薄雹保宝饱堡葆褓鸨报暴抱爆鲍曝刨瀑豹趵' ],
[ 'bei','背悲杯碑卑陂埤萆鹎北被备背辈倍贝蓓惫悖狈焙邶钡孛碚褙鐾鞴臂呗' ],
...
]
}
内容太多,只能复制这样一小部分,其余部分可以参考下面这条链接,然后改成上面那种格式就可以了。
接下来开始写组件
要做到拼音搜索匹配到中文,所以调用this.selectPinYin函数,下面开始写selectPinYin函数
当input为中文时:
return option.props.children.toLowerCase().indexOf( input.toLowerCase() ) = 0;
当input为字母时:
const value = option.props.children.toLowerCase().split( '' );
const newValue = value.map( item = this.chineseChangePY( item ) ).join( '' );
return newValue.indexOf( input.toLowerCase() ) = 0;
思路:
① 将列表中的每项内容,即option.props.children转成小写(万一不全是中文),然后进行分割,split('')把字符串转成数组
② 遍历得到的数组,并把每一个元素传递给chineseChangePY函数
③ chineseChangePY函数的作用:如果元素不是中文,直接返回;如果是中文,遍历PinYin.js中的数组,与每个子数组的第二个元素即中文字符串对比,如果元素在这个中文字符串里,返回中文字符串所在数组的第一个元素,即所需要的拼音-chinese.js文件
④ 将处理过的数组转成字符串
⑤ 和input进行对比,存在返回true,不存在返回false
bug说明: 比如遇到生僻字的时候,PinYin.js中没有收录进这个中文,就无法匹配。比如遇到多音字的时候,“藏”:既可以cang也可以zang,cang排在zang前面,当遍历匹配的时候遇到cang就已经返回了,所以如果有用户输入zang就匹配不到藏字。-chinese.js文件
如果有更好的方法,欢迎讨论交流。
JQuery到底是哪个js文件?
两个文件在功能上是一样的.jquery-xxx.min.js是压缩过的版本, 体积更小.jquery-xxx.js是完整版本, 如果你要研究jquery的代码就看这个.在使用上通常都用压缩版.压缩采用dean edwards的Javascript compressor-chinese.js文件
请问,有一个html文件,网页上显示的都是英文,怎样用JS做汉化?
查找标签内容 function find(){}
查字典 function dic(){findresult}
返回汉字 function chinese(){dic}
显示汉字在相应位置 function output(){ wirte chiniese}
spring 国际化 js怎么设置
一、基于浏览器语言的国际化配置 使用Spring的MVC,并且配置中有配置Resource文件 Xml代码 以下是引用片段: 其中,message-info是你的properties文件的通用名。如:我的配置文件叫 message-info.properties,message-info_zh_CN.properties等等,只要有了这个配置,然后配置JSP 渲染器为JSTL支持的,那么在你的JSP文件中使用fmt标记就可以实现客户浏览器语言国际化了。 如: 以下是引用片段: 其中的info.login.title和你的资源文件对应. 另外一种方式是使用spring自带的标签显示国际化信息,如: 以下是引用片段:-chinese.js文件
"/
二、基于动态加载的国际化配置 1、基于请求的国际化配置 基于请求的国际化配置是指,在当前请求内,国际化配置生效,否则自动以浏览器为主。 配置方式如下: 首先配置拦截器 以下是引用片段: 这个配置呢,是不论请求级别的国际化,还是Cookie级别的国际化,再或者Session级别的国际化,都必需有配置这个拦截器,否则会不能使用。 配好上面的拦截器之后,就将拦截器注入到你的UrlHandlerMapping中,例如: Xml代码 以下是引用片段: 1 这个时候,但凡有了符合UrlMapping的请求,就会被拦截,并且开始配置国际化参数 以下是引用片段: 默认的参数名为locale主意大小写。里面放的就是你的提交参数。如:en_US,zh_CN之类的,这个时候,你在页面上加一句简体中文 如果你的资源中,饱含建议中文的配置,那么就会变成你确定的简体中文拉。 2、基于Session的国际化配置 拦截器和基于请求的相同 Session的配置如下: 以下是引用片段: 在你的处理的Controller中,将提交上来的locale字段信息生成真正的Locale对象,然后将对象保存在Session中,默认保存的ID是SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME 这样,当你的Session不过期,那么语言种类始终保持正确的说。我一直是这样子用的,我觉得还是Session的好,老外们用了很满意。 3、基于Cookie的国际化配置 这个我就不说了,反正用的不多,至少我做的项目能不用Cookie就不用Cookie,所以,基于Cookie的国际化配置我就不细说了,如果想知道怎么配置,那么下载一个Spring,其中的例子程序就是用Cookie配置的,你自己读代码就OK了。 三、注意事项 如果不用默认的浏览器语言国际化方式,那么拦截器一定要配置,如果你有多个UrlMapping,那么就每个都配上拦截器。 至于配置的LocaleResolver的名字,一定要用上面的配置中的名字localeResolver当然了,这个是默认的名字来的,自己设置成别的也可以,但是就是麻烦,反正我用默认的就感觉不错 解决问题: 在前几天引用“Spring的MVC I18N-国际化相关配置 ”并做了测试,发现 有一问题。程序运行会抛出异常 “Cannot change HTTP accept header - use a different locale resolution strategy”,根本原因是spring source 做了限制,源码如下 Java代码 以下是引用片段: public class AcceptHeaderLocaleResolver implements LocaleResolver { public Locale resolveLocale(HttpServletRequest request) { return request.getLocale(); } public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { throw new UnsupportedOperationException( "Cannot change HTTP accept header - use a different locale resolution strategy"); } } 请注意上面的类,该类允许继承,所以需要改写setLocale方法,源码示范如下 Java代码 以下是引用片段: package org.springframework.web.servlet.i18n; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.DispatcherServlet; import org.springframework.web.servlet.LocaleResolver; public class MyAcceptHeaderLocaleResolver extends AcceptHeaderLocaleResolver { private Locale myLocal; public Locale resolveLocale(HttpServletRequest request) { return myLocal; } public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { myLocal = locale; } } 然后在action-servlet.xml里的设置为 Xml代码 以下是引用片段: chinese.do=filenameController us.do=filenameController-chinese.js文件
如何实现select省市地区三级联动并回显
首先导入三个js文件(注:最后)
显示:
div data-toggle="distpicker"
label省市区街道:/label
select id="province1" style="width:80px" required="true"/select
select id="city1" style="width:80px" required="true"/select
select id="district1" style="width:80px" required="true"/select
/div
拼接成:xx省-xx市-xx区的格式保存在后台,这里我保存的是对应的value值
function submitForm(){
var sheng="";
var shi="";
var qu="";
sheng=document.getElementById("province1").value;
shi=document.getElementById("city1").value;
qu=document.getElementById("district1").value;
$("#location").val(sheng+"-"+shi+"-"+qu);
$('#dlg_form').submit();
}
回显:我这个回显是在编辑时,$(#).trigger();方法是根据当前操作的下拉框是省或是市来初始化之后的下拉列表框,比如我先选择了省,则市和区就会被初始化
var str=node.location;
var strs = new Array();
strs=str.split("-");
$('#province1').val(strs[0]);
$('#province1').trigger("change");
$('#city1').val(strs[1]);
$('#city1').trigger("change");
$('#district1').val(strs[2]);
distpicker.data.js
(function (factory) {
if (typeof define === 'function' define.amd) {
// AMD. Register as anonymous module.
define('ChineseDistricts', [], factory);
} else {
// Browser globals.
factory();
}
})(function () {
var ChineseDistricts = {
86: {
110000: '北京市',
120000: '天津市',
130000: '河北省',
140000: '山西省',
150000: '内蒙古自治区',
210000: '辽宁省',
220000: '吉林省',
230000: '黑龙江省',
310000: '上海市',
320000: '江苏省',
330000: '浙江省',
340000: '安徽省',
350000: '福建省',
360000: '江西省',
370000: '山东省',
410000: '河南省',
420000: '湖北省',
430000: '湖南省',
440000: '广东省',
450000: '广西壮族自治区',
460000: '海南省',
500000: '重庆市',
510000: '四川省',
520000: '贵州省',
530000: '云南省',
540000: '西藏自治区',
610000: '陕西省',
620000: '甘肃省',
630000: '青海省',
640000: '宁夏回族自治区',
650000: '新疆维吾尔自治区',
710000: '台湾省',
810000: '香港特别行政区',
820000: '澳门特别行政区'
},
110000: {
110100: '北京市市辖区'
},
110100: {
110101: '东城区',
·
·
·
},
820000: {
820001: '花地玛堂区',
820002: '花王堂区',
820003: '望德堂区',
820004: '大堂区',
820005: '风顺堂区',
820006: '嘉模堂区',
820007: '路凼填海区',
820008: '圣方济各堂区'
}
};
if (typeof window !== 'undefined') {
window.ChineseDistricts = ChineseDistricts;
}
return ChineseDistricts;
});
distpicker.js
(function (factory) {
if (typeof define === 'function' define.amd) {
// AMD. Register as anonymous module.
define(['jQuery', 'ChineseDistricts'], factory);
} else if (typeof exports === 'object') {
// Node / CommonJS
factory(require('jquery'), require('ChineseDistricts'));
} else {
// Browser globals.
factory(jQuery, ChineseDistricts);
}
})(function ($, ChineseDistricts) {
'use strict';
if (typeof ChineseDistricts === 'undefined') {
throw new Error('The file "distpicker.data.js" must be included first!');
}
var NAMESPACE = 'distpicker';
var EVENT_CHANGE = 'change.' + NAMESPACE;
var PROVINCE = 'province';
var CIRY = 'city';
var DISTRICT = 'district';
function Distpicker(element, options) {
this.$element = $(element);
this.options = $.extend({}, Distpicker.DEFAULTS, $.isPlainObject(options) options);
this.placeholders = $.extend({}, Distpicker.DEFAULTS);
this.active = false;
this.init();
}
Distpicker.prototype = {
constructor: Distpicker,
init: function () {
var options = this.options;
var $select = this.$element.find('select');
var length = $select.length;
var data = {};
$select.each(function () {
$.extend(data, $(this).data());
});
$.each([PROVINCE, CIRY, DISTRICT], $.proxy(function (i, type) {
if (data[type]) {
options[type] = data[type];
this['$' + type] = $select.filter('[data-' + type + ']');
} else {
this['$' + type] = length i ? $select.eq(i) : null;
}
}, this));
this.bind();
// Reset all the selects (after event binding)
this.reset();
this.active = true;
},
bind: function () {
if (this.$province) {
this.$province.on(EVENT_CHANGE, (this._changeProvince = $.proxy(function () {
this.output(CIRY);
this.output(DISTRICT);
}, this)));
}
if (this.$city) {
this.$city.on(EVENT_CHANGE, (this._changeCity = $.proxy(function () {
this.output(DISTRICT);
}, this)));
}
},
unbind: function () {
if (this.$province) {
this.$province.off(EVENT_CHANGE, this._changeProvince);
}
if (this.$city) {
this.$city.off(EVENT_CHANGE, this._changeCity);
}
},
output: function (type) {
var options = this.options;
var placeholders = this.placeholders;
var $select = this['$' + type];
var districts = {};
var data = [];
var code;
var matched;
var value;
if (!$select || !$select.length) {
return;
}
value = options[type];
code = (
type === PROVINCE ? 86 :
type === CIRY ? this.$province this.$province.find(':selected').data('code') :
type === DISTRICT ? this.$city this.$city.find(':selected').data('code') : code
);
districts = $.isNumeric(code) ? ChineseDistricts[code] : null;
if ($.isPlainObject(districts)) {
$.each(districts, function (code, address) {
var selected = address === value;
if (selected) {
matched = true;
}
data.push({
code: code,
address: address,
selected: selected
});
});
}
if (!matched) {
if (data.length (options.autoSelect || options.autoselect)) {
data[0].selected = true;
}
// Save the unmatched value as a placeholder at the first output
if (!this.active value) {
placeholders[type] = value;
}
}
// Add placeholder option
if (options.placeholder) {
data.unshift({
code: '',
address: placeholders[type],
selected: false
});
}
$select.html(this.getList(data));
},
getList: function (data) {
var list = [];
$.each(data, function (i, n) {
list.push(
'option' +
' value="' + (n.address n.code ? n.address : '') + '"' +
' data-code="' + (n.code || '') + '"' +
(n.selected ? ' selected' : '') +
'' +
(n.address || '') +
'/option'
);
});
return list.join('');
},
reset: function (deep) {
if (!deep) {
this.output(PROVINCE);
this.output(CIRY);
this.output(DISTRICT);
} else if (this.$province) {
this.$province.find(':first').prop('selected', true).trigger(EVENT_CHANGE);
}
},
destroy: function () {
this.unbind();
this.$element.removeData(NAMESPACE);
}
};
Distpicker.DEFAULTS = {
autoSelect: true,
placeholder: true,
province: '—— 省 ——',
city: '—— 市 ——',
district: '—— 区 ——'
};
Distpicker.setDefaults = function (options) {
$.extend(Distpicker.DEFAULTS, options);
};
// Save the other distpicker
Distpicker.other = $.fn.distpicker;
// Register as jQuery plugin
$.fn.distpicker = function (option) {
var args = [].slice.call(arguments, 1);
return this.each(function () {
var $this = $(this);
var data = $this.data(NAMESPACE);
var options;
var fn;
if (!data) {
if (/destroy/.test(option)) {
return;
}
options = $.extend({}, $this.data(), $.isPlainObject(option) option);
$this.data(NAMESPACE, (data = new Distpicker(this, options)));
}
if (typeof option === 'string' $.isFunction(fn = data[option])) {
fn.apply(data, args);
}
});
};
$.fn.distpicker.Constructor = Distpicker;
$.fn.distpicker.setDefaults = Distpicker.setDefaults;
// No conflict
$.fn.distpicker.noConflict = function () {
$.fn.distpicker = Distpicker.other;
return this;
};
$(function () {
$('[data-toggle="distpicker"]').distpicker();
});
});
main.js
$(function () {
'use strict';
var $distpicker = $('#distpicker');
$distpicker.distpicker({
province: '福建省',
city: '厦门市',
district: '思明区'
});
$('#reset').click(function () {
$distpicker.distpicker('reset');
});
$('#reset-deep').click(function () {
$distpicker.distpicker('reset', true);
});
$('#destroy').click(function () {
$distpicker.distpicker('destroy');
});
$('#distpicker1').distpicker();
$('#distpicker2').distpicker({
province: '---- 所在省 ----',
city: '---- 所在市 ----',
district: '---- 所在区 ----'
});
$('#distpicker3').distpicker({
province: '浙江省',
city: '杭州市',
district: '西湖区'
});
$('#distpicker4').distpicker({
placeholder: false
});
$('#distpicker5').distpicker({
autoSelect: false
});
});
JS/jQ中 我要点击一次改变成English 再点变成chinese怎么弄?
可以考虑用以下方法:
1.将英语和汉字分别对应顺序地放到两个数组或对象里,各个显示的位置按顺序获取,然后切换的时候分别替换。