js 怎么动态设置 option 的selected 选项

js 怎么动态设置 option 的selected 选项,第1张

通过for循环判断每个选项,一旦满足条件则设置其selected属性为true即可,关键代码:

下面给出实例演示:

1、HTML结构

2、javascript代码

3、设置效果:如图设置选中项为2,点击按钮后“赵云”即被选中。

扩展资料:

selected 定义和用法

selected 属性规定在页面加载时预先选定该选项。

被预选的选项会显示在下拉列表最前面的位置。

也可以在页面加载后通过 JavaScript 设置 selected 属性。

参考资料:

百度百科JS

以下脚本findmaxpathsh 可以查询最大路径,

用法:/findmaxpathsh 指定路径

举例:findmaxpathsh /home/heqa/c

输出:输出最大路径

缺点:如果有多个同级路径,只输出第一个路径

#!/bin/bash

maxpath=$1

maxlvl=0

list_alldir(){

for file2 in `ls -a $1`

do

if [ x"$file2" != x"" -a x"$file2" != x"" ];then

curpath="$1/$file2"

if [ -d "$curpath" ];then

curlvl=`echo "$curpath" | awk -F'/' '{print NF-1}'`

if [ $curlvl -gt $maxlvl ];then

maxpath=$curpath

maxlvl=$curlvl

fi

list_alldir "$curpath"

fi

fi

done

}

list_alldir $1

echo $maxpath

list_alldir $1

echo $maxpath

927出成绩。CCF非专业级别软件能力认证(CSP-J/S 2022)第一轮已结束,第二轮认证将于10月29日举行。

晋级规则

参加了CSP-J/S 2022第一轮认证,CSP-J入门级成绩达到25分(含25分)以上,CSP-S提高级成绩达到21分(含21分)以上的认证者。

省级认证单位根据今年CSP-JS第二轮认证点机器数量决定第二轮晋级名额。同时根据CCF发布的《关于优先满足学生认证者参加CSP-JS 2022的通知》,“在CSP-JS2022第二轮报名中,取消社会认证者报名”。综合以上两个条件,划定CSP-J组第二轮晋级分数线为:64分(含64分)。CSP-S组第二轮晋级分数线为:525分(含525分)。

处理 React 组件之间的交流方式,主要取决于组件之间的关系,然而这些关系的约定人就是你。

我不会讲太多关于 data-stores、data-adapters 或者 data-helpers 之类的话题。我下面只专注于 React 组件本身的交流方式的讲解。

React 组件之间交流的方式,可以分为以下 3 种:

父组件向子组件传值;

子组件向父组件传值;

没有任何嵌套关系的组件之间传值(PS:比如:兄弟组件之间传值)

一、父组件向子组件传值

初步使用

这个是相当容易的,在使用 React 开发的过程中经常会使用到,主要是利用 props 来进行交流。例子如下:

// 父组件

var MyContainer = ReactcreateClass({

getInitialState: function () {

return {

checked: true

};

},

render: function() {

return (

<ToggleButton text="Toggle me" checked={thisstatechecked} />

);

}

});

// 子组件

var ToggleButton = ReactcreateClass({

render: function () {

// 从父组件获取的值

var checked = thispropschecked,

text = thispropstext;

return (

<label>{text}: <input type="checkbox" checked={checked} /></label>

);

}

});

进一步讨论

如果组件嵌套层次太深,那么从外到内组件的交流成本就变得很高,通过 props 传递值的优势就不那么明显了。(PS:所以我建议尽可能的减少组件的层次,就像写 HTML 一样,简单清晰的结构更惹人爱)

// 父组件

var MyContainer = ReactcreateClass({

render: function() {

return (

<Intermediate text="where is my son" />

);

}

});

// 子组件1:中间嵌套的组件

var Intermediate = ReactcreateClass({

render: function () {

return (

<Child text={thispropstext} />

);

}

});

// 子组件2:子组件1的子组件

var Child = ReactcreateClass({

render: function () {

return (

<span>{thispropstext}</span>

);

}

});

二、子组件向父组件传值

接下来,我们介绍子组件控制自己的 state 然后告诉父组件的点击状态,然后在父组件中展示出来。因此,我们添加一个 change 事件来做交互。

// 父组件

var MyContainer = ReactcreateClass({

getInitialState: function () {

return {

checked: false

};

},

onChildChanged: function (newState) {

thissetState({

checked: newState

});

},

render: function() {

var isChecked = thisstatechecked 'yes' : 'no';

return (

<div>

<div>Are you checked: {isChecked}</div>

<ToggleButton text="Toggle me"

initialChecked={thisstatechecked}

callbackParent={thisonChildChanged}

/>

</div>

);

}

});

// 子组件

var ToggleButton = ReactcreateClass({

getInitialState: function () {

return {

checked: thispropsinitialChecked

};

},

onTextChange: function () {

var newState = !thisstatechecked;

thissetState({

checked: newState

});

// 这里要注意:setState 是一个异步方法,所以需要 *** 作缓存的当前值

thispropscallbackParent(newState);

},

render: function () {

// 从父组件获取的值

var text = thispropstext;

// 组件自身的状态数据

var checked = thisstatechecked;

return (

<label>{text}: <input type="checkbox" checked={checked} onChange={thisonTextChange} /></label>

);

}

});

我觉得原文作者用代码不是很直观,接下来我话一个流程走向简图来直观描述一下这个过程:

这样做其实是依赖 props 来传递事件的引用,并通过回调的方式来实现的,这样实现不是特别好,但是在没有任何工具的情况下也是一种简单的实现方式

这里会出现一个我们在之前讨论的问题,就是组件有多层嵌套的情况下,你必须要一次传入回调函数给 props 来实现子组件向父组件传值或者 *** 作。

Tiny-Tip: React Event System

在 onChange 事件或者其他 React 事件中,你能够获取以下东西:

this:指向你的组件

一个参数:这个参数是一个 React 合成事件,SyntheticEvent。

React 对所有事件的管理都是自己实现的,与我们之前使用的 onclick、onchange 事件不一样。从根本上来说,他们都是绑定到 body 上。

documenton('change', 'input[data-reactid="02"]', function () {});

上面这份代码不是来自于 React,只是打一个比方而已。

如果我没有猜错的话,React 真正处理一个事件的代码如下:

var listenTo = ReactBrowserEventEmitterlistenTo;

function putListener(id, registrationName, listener, transaction) {

var container = ReactMountfindReactContainerForID(id);

if (container) {

var doc = containernodeType === ELEMENT_NODE_TYPE containerownerDocument : container;

listenTo(registrationName, doc);

}

}

// 在监听事件的内部,我们能发现如下:

targetaddEventListener(eventType, callback, false);

这里有所有 React 支持的事件:中文文档-事件系统

多个子组件使用同一个回调的情况

// 父组件

var MyContainer = ReactcreateClass({

getInitialState: function () {

return {

totalChecked: 0

};

},

onChildChanged: function (newState) {

var newToral = thisstatetotalChecked + (newState 1 : -1);

thissetState({

totalChecked: newToral

});

},

render: function() {

var totalChecked = thisstatetotalChecked;

return (

<div>

<div>How many are checked: {totalChecked}</div>

<ToggleButton text="Toggle me"

initialChecked={thisstatechecked}

callbackParent={thisonChildChanged}

/>

<ToggleButton text="Toggle me too"

initialChecked={thisstatechecked}

callbackParent={thisonChildChanged}

/>

<ToggleButton text="And me"

initialChecked={thisstatechecked}

callbackParent={thisonChildChanged}

/>

</div>

);

}

});

// 子组件

var ToggleButton = ReactcreateClass({

getInitialState: function () {

return {

checked: thispropsinitialChecked

};

},

onTextChange: function () {

var newState = !thisstatechecked;

thissetState({

checked: newState

});

// 这里要注意:setState 是一个异步方法,所以需要 *** 作缓存的当前值

thispropscallbackParent(newState);

},

render: function () {

// 从父组件获取的值

var text = thispropstext;

// 组件自身的状态数据

var checked = thisstatechecked;

return (

<label>{text}: <input type="checkbox" checked={checked} onChange={thisonTextChange} /></label>

);

}

});

这是非常容易理解的,在父组件中我们增加了一个totalChecked来替代之前例子中的checked,当子组件改变的时候,使用同一个子组件的回调函数给父组件返回值。

三、没有任何嵌套关系的组件之间传值

如果组件之间没有任何关系,组件嵌套层次比较深(个人认

为 2 层以上已经算深了),或者你为了一些组件能够订阅、写入一些信号,不想让组件之间插入一个组件,让两个组件处于独立的关系。对于事件系统,这里有

2

个基本 *** 作步骤:订阅(subscribe)/监听(listen)一个事件通知,并发送(send)/触发(trigger)/发布(publish)

/发送(dispatch)一个事件通知那些想要的组件。

下面讲介绍 3 种模式来处理事件,你能点击这里来比较一下它们。

简单总结一下:

(1) Event Emitter/Target/Dispatcher

特点:需要一个指定的订阅源

// to subscribe

otherObjectaddEventListener(‘click’, function() { alert(‘click!’); });

// to dispatch

thisdispatchEvent(‘click’);

(2) Publish / Subscribe

特点:触发事件的时候,你不需要指定一个特定的源,因为它是使用一个全局对象来处理事件(其实就是一个全局

广播的方式来处理事件)

// to subscribe

globalBroadcastersubscribe(‘click’, function() { alert(‘click!’); });

// to dispatch

globalBroadcasterpublish(‘click’);

(3) Signals

特点:与Event

Emitter/Target/Dispatcher相似,但是你不要使用随机的字符串作为事件触发的引用。触发事件的每一个对象都需要一个确切的名字

(就是类似硬编码类的去写事件名字),并且在触发的时候,也必须要指定确切的事件。(看例子吧,很好理解)

// to subscribe

otherObjectclickedadd(function() { alert(‘click’); });

// to dispatch

thisclickeddispatch();

如果你只想简单的使用一下,并不需要其他 *** 作,可以用简单的方式来实现:

// 简单实现了一下 subscribe 和 dispatch

var EventEmitter = {

_events: {},

dispatch: function (event, data) {

if (!this_events[event]) { // 没有监听事件

return;

}

for (var i = 0; i < this_events[event]length; i++) {

this_events[event][i](data);

}

},

subscribe: function (event, callback) {

// 创建一个新事件数组

if (!this_events[event]) {

this_events[event] = [];

}

this_events[event]push(callback);

}

};

otherObjectsubscribe('namechanged', function(data) { alert(dataname); });

thisdispatch('namechanged', { name: 'John' });

如果你想使用 Publish/Subscribe 模型,可以使用:PubSubJS

React 团队使用的是:js-signals 它基于 Signals 模式,用起来相当不错。

Events in React

使用 React 事件的时候,必须关注下面两个方法:

componentDidMount

componentWillUnmount

在处理事件的时候,需要注意:

在 componentDidMount 事件中,如果组件挂载(mounted)完成,再订阅事件;当组件卸载(unmounted)的时候,在 componentWillUnmount 事件中取消事件的订阅。

(如果不是很清楚可以查阅 React 对生命周期介绍的文档,里面也有描述。原文中介绍的是 componentWillMount 个人认为应该是挂载完成后订阅事件,比如Animation这个就必须挂载,并且不能动态的添加,谨慎点更好)

因为组件的渲染和销毁是由 React 来控制的,我们不知道怎么引用他们,所以EventEmitter 模式在处理组件的时候用处不大。

pub/sub 模式可以使用,你不需要知道引用。

下面来一个例子:实现有多个 product 组件,点击他们的时候,展示 product 的名字。

(我在例子中引入了之前推荐的 PubSubJS 库,如果你觉得引入代价太大,也可以手写一个简版,还是比较容易的,很好用哈,大家也可以体验,但是我还是不推荐全局广播的方式)

// 定义一个容器

var ProductList = ReactcreateClass({

render: function () {

return (

<div>

<ProductSelection />

<Product name="product 1" />

<Product name="product 2" />

<Product name="product 3" />

</div>

);

}

});

// 用于展示点击的产品信息容器

var ProductSelection = ReactcreateClass({

getInitialState: function() {

return {

selection: 'none'

};

},

componentDidMount: function () {

thispubsub_token = PubSubsubscribe('products', function (topic, product) {

thissetState({

selection: product

});

}bind(this));

},

componentWillUnmount: function () {

PubSubunsubscribe(thispubsub_token);

},

render: function () {

return (

<p>You have selected the product : {thisstateselection}</p>

);

}

});

var Product = ReactcreateClass({

onclick: function () {

PubSubpublish('products', thispropsname);

},

render: function() {

return <div onClick={thisonclick}>{thispropsname}</div>;

}

});

ES6: yield and js-csp

ES6 中有一种传递信息的方式,使用生成函数(generators)和 yield 关键字。可以看一下

(这里我写一个简单的 DEMO 介绍一下这种新的传递方式,其实大同小异)

function list() {

for(var i = 0; i < argumentslength; i++) {

yield arguments[i];

}

return "done";

}

var o = list(1, 2, 3);

var cur = onext;

while(!curdone) {

cur = onext();

consolelog(cur);

}

以上例子来自于屈屈的一篇博客:ES6 中的生成器函数介绍 屈屈是一个大牛,大家可以经常关注他的博客。

通常来说,你有一个队列,对象在里面都能找到一个引用,在定义的时候锁住,当发生的时候,立即打开锁执行。js-csp 是一种解决办法,也许以后还会有其他解决办法。

Csp主要考:大学计算机专业所学习的程序设计、数据结构、算法以及相关的数学基础知识。

csp是计算机软件能力认证的一种考试。csp重点考察软件开发者实际编程能力。CSP认证考试全部采用上机编程方式,可供报考编程语言为C/C++、Java或Python,考生报名时需选择报考语言,考试时只得使用报名时的语言参加认证。

考核为黑盒测试,以通过测试用例判断程序是否能够输出正确结果来进行评分。考试时间为240分钟。考生允许携带不限量纸质资料在认证过程中翻阅,但不得在认证过程中连接互联网或电子存储设备,不得在考试结束后使用电子存储设备拷贝自己作答的答案。

Csp介绍:

CCF CSP-JS 是CCF CSP非专业级别的软件能力认证(简称CCF CSP-JS),分两个级别,分别为CSP-J(入门组,Junior)和CSP-S(提高组,Senior),均涉及算法和编程。任何人都可以报名参加。

CSP-JS赛程分为初赛(笔试)和复赛(机试),即CSP-J1/S1与CSP-J2/S2。参赛者必须先参加第一轮,达到一定的分数者方可参加第二轮。

CSP-JS自2019年起举办,有说法认为,CSP取代了NOIP,但官方否认了这一说法。

以上就是关于js 怎么动态设置 option 的selected 选项全部的内容,包括:js 怎么动态设置 option 的selected 选项、shell找这个文件夹下最大的路径:csp/js csp/js/customization 像这种需要路劲:csp/js/customization、csp-j2022什么时候出成绩等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9312457.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存