国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[譯] React.js 模式

mumumu / 869人閱讀

摘要:此時,我將它寫下來討論和分享這些我發現的模式。正確的姿勢應該是通過的方式獲取子組件的一些信息。高階組件是需要另外一個有用的模式依賴注入。也有部分人稱它是一種模式。最直接的方式是通過每一層通過來傳遞。

原文出自:http://krasimirtsonev.com/blog/article/react-js-in-design-patterns

前言

我想找一個好的前端前端框架,找了很久。這個框架將能夠幫助我寫出具有可擴展性、可維護性 UI 的代碼。通過對 React.js 優勢的理解,我認為“我找到了它”。在我大量的使用過程中,我發現了一些模式性的東西。這些技術被一次又一次的用于編程開發之中。此時,我將它寫下來、討論和分享這些我發現的模式。

這些所有的代碼都是可用的,能夠在 https://github.com/krasimir/react-in-patterns 中下載。我可能不會更新我的博客,但是我將一直在 GitHub 中發布一些東西。我也將鼓勵你在 GitHub 中討論這些模式,通過 issue 或者直接 pull request 的方式。

一、React 自己的交流方式(Communication)

在使用 React 構建了幾個月的情況下,你將能夠體會到每一個 React Component 都是一個小系統,它能夠自己運作。它有自己的 state、input、output.

Input

React Component 通過 props 作為 input(之后用輸入代替)。下面我們來寫一個例子:

// Title.jsx
class Title extends React.Component {
    render() {
        return 

{ this.props.text }

; } }; Title.propTypes = { text: React.PropTypes.string }; Title.defaultProps = { text: "Hello world" }; // App.jsx class App extends React.Component { render() { return ; } };</pre> <p>其中的 <b>Title</b> 組件只有一個輸入 - <b>text</b>. 在父組件(App)提供了一個屬性,通過 <b><Title></b> 組件。在 <b>Title</b> 組件中我們添加了兩個設置 <b>propTypes</b> 和 <b>defaultProps</b>,我們來多帶帶看一下:</p> <p><p>propTypes - 定義 props 的類型,這將幫助我們告訴 React 我們將傳什么類型的 prop,能夠對這個 prop 進行驗證(或者說是測試)。</p></p> <p><p>defaultProps - 定義 props 默認的值,設置一個默認值是一個好習慣。</p></p> <p>還有一個 <b>props.children</b> 屬性,能夠讓我們訪問到當前組件的子組件。比如:</p> <pre>class Title extends React.Component { render() { return ( <h1> { this.props.text } { this.props.children } </h1> ); } }; class App extends React.Component { render() { return ( <Title text="Hello React"> <span>community</span> ); } };

值得注意的是:如果我們沒有在 Title 組件的 render 方法中添加 { this.props.children } 代碼,其中的 span 標簽(孩子組件)將不會被渲染。

對于一個組件的間接性輸入(就是多層組件傳遞數據的時候),我們也可以調用 context 進行數據的訪問。在整個 React tree 中的每一個組件中可能會有一個 context 對象。更多的說明將在依賴注入章節講解。

Output

React 的輸出就是渲染過后的 HTML 代碼。在視覺上我們將看到一個 React 組件的樣子。當然,有些組件可能包含一些邏輯,能夠幫助我們傳遞一些數據或者觸發一個事件行為(這類組件可能不會有具體的 UI 形態)。為了實現邏輯類型的組件,我們將繼續使用組件的 props:

class Title extends React.Component {
    render() {
        return (
            

); } }; class App extends React.Component { render() { return ; } logoClicked() { console.log("logo clicked"); } };</pre> <p>我們通過一個 callback 的方式在子組件中進行調用,<b>logoClicked</b> 方法能夠接受一些數據,這樣我們就能夠從子組件向父組件傳輸一些數據了(這里就是 React 方式的子組件向父組件通信)。</p> <p>我們之前有提到我們不能夠訪問 child 的 state。或者換句話說,我們不能夠使用 this.props.children[0].state 的方式或者其他什么方式去訪問。正確的姿勢應該是通過 props callback 的方式獲取子組件的一些信息。這是一件好事。這就迫使我們要去定義明確的 APIs,并鼓勵使用單向數據流(在后面的<b>單向數據流</b>中將介紹)。</p> <b>二、組件構成(composition)</b> <pre><p>源碼:https://github.com/krasimir/r...</p></pre> <p>另外一個很棒的是 React 的可組合性。對于我來說,除了 React 之外還沒有發現有任何框架能夠如此簡單的方式去創建組件以及合并組件。這段我將探索一些組件的構建方式,來讓開發工作更加棒。</p> <p>讓我們先來看一個簡單的例子:</p> <p><p>假設我們有一個應用,包含 header 部分,header 內部有一個 navigation(導航)組件。</p></p> <p><p>所以,我們將有三個 React 組件:App、Header 和 Navigation。</p></p> <p><p>他們是層級嵌套的關系。</p></p> <p>所以最后代碼如下:</p> <pre><App> <Header> <Navigation> ... </Navigation> </Header> </App></pre> <p>我們為了組合這些小組件,并且引用他們,我們需要向下面這樣定義他們:</p> <pre>// app.jsx import Header from "./Header.jsx"; export default class App extends React.Component { render() { return <Header />; } } // Header.jsx import Navigation from "./Navigation.jsx"; export default class Header extends React.Component { render() { return <header><Navigation /></header>; } } // Navigation.jsx export default class Navigation extends React.Component { render() { return (<nav> ... </nav>); } }</pre> <p>然而這樣,我們用這種方式去組織組件會有幾個問題:</p> <p><p>我們將 App 組件做為程序的入口,在這個組件里面去構建組件是一個不錯的地方。對于 Header 組件,可能會包含其他組件,比如 logo、search 或者 slogan 之類的。它將是非常好處理,可以通過某種方式從外部傳入,因此我們沒有需要創建一個強依賴的組件。如果我們在另外的地方需要使用 Header 組件,但是這個時候又不需要內層的 Navigation 子組件。這個時候我們就不容易實現,因為 Header 和 Navigation 組件是兩個強耦合的組件。</p></p> <p><p>這樣編寫組件是不容易測試的,我們可能在 Header 組件中有一些業務邏輯,為了測試 Header 組件,我們就必須要創建一個 Header 的實例(其實就是引用組件來渲染)。然而,又因為 Header 組件依賴了其他組件,這就導致了我們也可能需要創建一些其他組件的實例,這就讓測試不是那么容易。并且我們在測試過程中,如果 Navigation 組件測試失敗,也將導致 Header 組件測試失敗,這將導致一個錯誤的測試結果(因為不會知道是哪個組件測試沒有通過)。(注:然后在測試中 shallow rendering 解決了這個問題,能夠只渲染 Header 組件,不用實例化其他組件)。</p></p> <p><strong>使用 React"s children API</strong></p> <p>在 React 中,我們能夠通過 <b>this.props.children</b> 來很方便的處理這個問題。這個屬性能夠讓父組件讀取和訪問子組件。這個 API 將使我們的 Header 組件更抽象和低耦合(原文是 dependency-free 不好翻譯,但是是這個意思)。</p> <pre>// App.jsx export default class App extends React.Component { render() { return ( <Header> <Navigation /> </Header> ); } } // Header.jsx export default class Header extends React.Component { render() { return <header>{ this.props.children }</header>; } }</pre> <p>這將容易測試,因為我們可以讓 Header 組件渲染成一個空的 div 標簽。這就讓組件脫離出來,然后只專注于應用的開發(其實就是抽象了一層父組件,然后讓這個父組件和子組件進行了解耦,然后子組件可能才是應用的一些功能實現)。</p> <p><strong>將 child 做為一個屬性</strong></p> <p>每一個 React 組件都接受 props。這非常好,這個 props 屬性能包含一些數據。或者說是其他組件。</p> <pre>// App.jsx class App extends React.Component { render() { var title = <h1>Hello there!</h1>; return ( <Header title={ title }> <Navigation /> </Header> ); } }; // Header.jsx export default class Header extends React.Component { render() { return ( <header> { this.props.title } <hr /> { this.props.children } </header> ); } };</pre> <p>這個技術在我們要合并兩個組件,這個組件在 Header 內部的時候是非常有用的,以及在外部提供這個需要合并的組件。</p> <b>三、高階組件(Higher-order components)</b> <pre><p>源碼:https://github.com/krasimir/r...</p></pre> <p>高階組件看起來很像裝飾器模式。他是包裹一個組件和附加一些其他功能或者 props 給它。</p> <p>這里通過一個函數來返回一個高階組件:</p> <pre>var enhanceComponent = (Component) => class Enhance extends React.Component { render() { return ( <Component {...this.state} {...this.props} /> ) } }; export default enhanceComponent;</pre> <p>我們經常提供一個工廠函數,接受我們的原始組件,當我們需要訪問的時候,就返回這個 被升級或者被包裹 過的組件版本給它。比如:</p> <pre>var OriginalComponent = () => <p>Hello world.</p>; class App extends React.Component { render() { return React.createElement(enhanceComponent(OriginalComponent)); } };</pre> <p>首先,高階組件其實也是渲染的原始組件(傳入的組件)。一個好的習慣是直接傳入 state 和 props 給它。這將有助于我們想代理數據和像是用原始組件一樣去使用這個高階組件。</p> <p>高階組件讓我們能夠控制輸入。這些數據我們想通過 props 進行傳遞。現在像我們說的那樣,我們有一個配置,OriginalComponent 組件需要這個配置的數據,代碼如下:</p> <pre>var config = require("path/to/configuration"); var enhanceComponent = (Component) => class Enhance extends React.Component { render() { return ( <Component {...this.state} {...this.props} title={ config.appTitle } /> ) } };</pre> <p>這個配置是隱藏在高階組件中。OriginalComponent 組件只能通過 props 來調用 title 數據。至于 title 數據從哪里來對于 OriginalComponent 來說并不重要(這就非常棒了!封閉性做的很好)。這是極大的優勢,因為它幫助我們測試獨立組件,以及提供一個好的機制去 mocking 數據。這里能夠這樣使用 title 屬性( 也就是 stateless component[無狀態組件] )。</p> <pre>var OriginalComponent = (props) => <p>{ props.title }</p>;</pre> <p>高階組件是需要另外一個有用的模式-依賴注入(dependency injection)。</p> <b>四、依賴注入(Dependency injection)</b> <pre><p>源碼:https://github.com/krasimir/r...</p></pre> <p>大部分模塊/組件都會有依賴。能夠合理的管理這些依賴能夠直接影響到項目是否成功。有一個技術叫:依賴注入(dependency injection,之后我就簡稱 DI 吧)。也有部分人稱它是一種模式。這種技術能夠解決依賴的問題。</p> <p>在 React 中 DI 很容易實現,讓我們跟著應用來思考:</p> <pre>// Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from "./Title.jsx"; export default function Header() { return ( <header> <Title /> </header> ); } // App.jsx import Header from "./Header.jsx"; class App extends React.Component { constructor(props) { super(props); this.state = { title: "React in patterns" }; } render() { return <Header />; } };</pre> <p>有一個 "React in patterns" 的字符串,這個字符串以某種方式來傳遞給 Title 組件。</p> <p>最直接的方式是通過: App => Header => Title 每一層通過 props 來傳遞。然而這樣可能在這個三個組件的時候比較方便,但是如果有多個屬性以及更深的組件嵌套的情況下將比較麻煩。大量組件將接收到它們并不需要的屬性(因為是逐層傳遞)。</p> <p>我們前面提到的高階組件的方式能夠用來注入數據。讓我們用這個技術來注入一下 title 變量。</p> <pre>// enhance.jsx var title = "React in patterns"; var enhanceComponent = (Component) => class Enhance extends React.Component { render() { return ( <Component {...this.state} {...this.props} title={ title } /> ) } }; // Header.jsx import enhance from "./enhance.jsx"; import Title from "./Title.jsx"; var EnhancedTitle = enhance(Title); export default function Header() { return ( <header> <EnhancedTitle /> </header> ); }</pre> <p>這個 title 是隱藏在中間層(高階組件)中,我們通過 prop 來傳遞給 Title 組件。這很好的解決了,但是這只是解決了一半問題,現在我們沒有層級的方式去傳遞 title,但是這些數據都在 echance.jsx 中間層組件。</p> <p>React 有一個 context 的概念,這個 context 能夠在每一個組件中都可以訪問它。這個優點像 event bus 模型,只不過這里是一個數據。這個方式讓我們能夠在任何地方訪問到數據。</p> <pre>// 我們定義數據的地方:context => title var context = { title: "React in patterns" }; class App extends React.Component { getChildContext() { return context; } ... }; App.childContextTypes = { title: React.PropTypes.string }; // 我們需要這個數據的地方 class Inject extends React.Component { render() { var title = this.context.title; ... } } Inject.contextTypes = { title: React.PropTypes.string };</pre> <pre><p>值得注意的是我們必須使用 childContextTypes 和 contextTypes 這兩個屬性,定義這個上下文對象的類型聲明。如果沒有聲明,context 這個對象將為空(經我測試,如果沒有這些類型定義直接報錯了,所以一定要記得加上哦)。這可能有些不太合適的地方,因為我們可能會放大量的東西在這里。所以說 context 定義成一個純對象不是很好的方式,但是我們能夠讓它成為一個接口的方式來使用它,這將允許我們去存儲和獲取數據,比如:</p></pre> <pre>// dependencies.js export default { data: {}, get(key) { return this.data[key]; }, register(key, value) { this.data[key] = value; } }</pre> <p>然后,我們再看一下我們的例子,頂層的 App 組件可能就會像這樣寫:</p> <pre>import dependencies from "./dependencies"; dependencies.register("title", "React in patterns"); class App extends React.Component { getChildContext() { return dependencies; } render() { return <Header />; } }; App.childContextTypes = { data: React.PropTypes.object, get: React.PropTypes.func, register: React.PropTypes.func };</pre> <p>然后,我們的 Title 組件就從這個 context 中獲取數據:</p> <pre>// Title.jsx export default class Title extends React.Component { render() { return <h1>{ this.context.get("title") }</h1> } } Title.contextTypes = { data: React.PropTypes.object, get: React.PropTypes.func, register: React.PropTypes.func };</pre> <p>最好的方式是我們在每次使用 context 的時候不想定義 contextTypes。這就是能夠使用高階組件包裹一層。甚至更多的是,我們能夠寫一個多帶帶的函數,去更好的描述和幫助我們聲明這個額外的地方。之后通過 this.context.get("title") 的方式直接訪問 context 數據。我們通過高階組件獲取我們需要的數據,然后通過 prop 的方式來傳遞給我們的原始組件,比如:</p> <pre>// Title.jsx import wire from "./wire"; function Title(props) { return <h1>{ props.title }</h1>; } export default wire(Title, ["title"], function resolve(title) { return { title }; });</pre> <p>這個 wire 函數有三個參數:</p> <p><p>一個 React 組件</p></p> <p><p>需要依賴的數據,這個數據以數組的方式定義</p></p> <p><p>一個 mapper 的函數,它能接受上下文的原始數據,然后返回一個我們的 React 組件(比如 Title 組件)實際需要的數據對象(相當于一個 filter 管道的作用)。</p></p> <p>這個例子我們只是通過這種方式傳遞來一個 title 字符串變量。然后在實際應用開發過程中,它可能是一個數據的存儲集合,配置或者其他東西。因此,我們通過這種方式,我們能夠通過哪些我們確實需要的數據,不用去污染組件,讓它們接收一些并不需要的數據。</p> <p>這里的 wire 函數定義如下:</p> <pre>export default function wire(Component, dependencies, mapper) { class Inject extends React.Component { render() { var resolved = dependencies.map(this.context.get.bind(this.context)); var props = mapper(...resolved); return React.createElement(Component, props); } } Inject.contextTypes = { data: React.PropTypes.object, get: React.PropTypes.func, register: React.PropTypes.func }; return Inject; };</pre> <p>Inject 是一個高階組件,它能夠訪問 context 對象的 dependencies 所有的配置項數組。這個 mapper 函數能夠接收 context 的數據,并轉換它,然后給 props 最后傳遞到我們的組件。</p> <p><strong>最后來看一下關于依賴注入</strong></p> <p>在很多解決方案中,都使用了依賴注入的技術,這些都基于 React 組件的 context 屬性。我認為這很好的知道發生了什么。在寫這篇文憑的時候,大量流行構建 React 應用的方式會需要 Redux。著名 connect 函數和 Provider 組件,就是使用的 context(現在大家可以看一下源碼了)。</p> <p>我個人發現這個技術是真的有用。它是滿足了我處理所有依賴數據的需要,使我的組件變得更加純粹和更方便測試。</p> <b>五、單向數據流(One-way direction data flow)</b> <pre><p>源碼:https://github.com/krasimir/r...</p></pre> <p>在 React 中單向數據流的模式運作的很好。它讓組件不用修改數據,只是接收它們。它們只監聽數據的改變和可能提供一些新的值,但是它們不會去改變數據存儲器里面實際的數據。更新會放在另外地方的機制下,和組件只是提供渲染和新的值。</p> <p>讓我們來看一個簡單的 Switcher 組件的例子,這個組件包含了一個 button。我們點擊它將能夠控制切換(flag 不好翻譯,程序員都懂的~)</p> <pre>class Switcher extends React.Component { constructor(props) { super(props); this.state = { flag: false }; this._onButtonClick = e => this.setState({ flag: !this.state.flag }); } render() { return ( <button onClick={ this._onButtonClick }> { this.state.flag ? "lights on" : "lights off" } </button> ); } }; // ... and we render it class App extends React.Component { render() { return <Switcher />; } };</pre> <p>這個時候再我們的組件里面有一個數據。或者換句話說:Switcher 只是一個一個我們需要通過 flag 變量來渲染的地方。讓我們發送它到一個外面的 store 中:</p> <pre>var Store = { _flag: false, set: function (value) { this._flag = value; }, get: function () { return this._flag; } }; class Switcher extends React.Component { constructor(props) { super(props); this.state = { flag: false }; this._onButtonClick = e => { this.setState({ flag: !this.state.flag }, () => { this.props.onChange(this.state.flag); }); } } render() { return ( <button onClick={ this._onButtonClick }> { this.state.flag ? "lights on" : "lights off" } </button> ); } }; class App extends React.Component { render() { return <Switcher onChange={ Store.set.bind(Store) } />; } };</pre> <p>我們的 Store 對象是單例 我們有 helper 去設置和獲取 _flag 這個屬性的值。通過 getter,然后組件能夠通過外部數據進行更新。大楷我們的應用工作流看起來是這樣的:</p> <pre>User"s input | Switcher -------> Store </pre> <p>讓我們假設我們要通過 Store 給后端服務去保存這個 flag 值。當用戶返回的時候,我們必須設置合適的初始狀態。如果用戶離開后在后來,我們必須展示 "lights on" 而不是默認的 "lights off"。現在它變得困難,因為我們的數據是在兩個地方。UI 和 Store 中都有自己的狀態,我們必須在它們之間交流:Store --> Switcher 和 Switcher --> Store。</p> <pre>// ... in App component <Switcher value={ Store.get() } onChange={ Store.set.bind(Store) } /> // ... in Switcher component constructor(props) { super(props); this.state = { flag: this.props.value }; ... </pre> <p>我們的模型改變就要通過:</p> <pre>User"s input | Switcher <-------> Store ^ | | | | | | v Service communicating with our backend </pre> <p>所有這些都導致了需要管理兩個狀態而不是一個。如果 Store 的改變是通過其他系統的行為,我們就必須傳送這些改變給 Switcher 組件和我們就增加了自己 App 的復雜度。</p> <p>單向數據流就解決了這個問題。它消除了這種多種狀態的情況,只保留一個狀態,這個狀態一般是在 Store 里面。為了實現單向數據流這種方式,我們必須簡單修改一下我們的 Store 對象。我們需要一個能夠訂閱改變的邏輯。</p> <pre>var Store = { _handlers: [], _flag: "", onChange: function (handler) { this._handlers.push(handler); }, set: function (value) { this._flag = value; this._handlers.forEach(handler => handler()) }, get: function () { return this._flag; } };</pre> <p>然后我們將有一個鉤子在主要的 App 組件中,我們將在每次 Store 中的數據變化的時候重新渲染它。</p> <pre>class App extends React.Component { constructor(props) { super(props); Store.onChange(this.forceUpdate.bind(this)); } render() { return ( <div> <Switcher value={ Store.get() } onChange={ Store.set.bind(Store) } /> </div> ); } };</pre> <p><strong>注</strong>:我們使用了 forceUpdate 的方式,但這種方式不推薦使用。一般情況能夠使用高階組件進行重新渲染。我們使用 forceUpdate 只是簡單的演示。</p> <p>因為這個改變,Switcher 變得比之前簡單。我們不需要內部的 state:</p> <pre>class Switcher extends React.Component { constructor(props) { super(props); this._onButtonClick = e => { this.props.onChange(!this.props.value); } } render() { return ( <button onClick={ this._onButtonClick }> { this.props.value ? "lights on" : "lights off" } </button> ); } };</pre> <p>這個好處在于:這個模式讓我們的組件變成了展示 Store 數據的一個填鴨式組件。它是真的讓 React 組件變成了純粹的渲染層。我們寫我們的應用是聲明的方式,并且只在一個地方處理一些復雜的數據。</p> <p>這個應用的工作流就變成了:</p> <pre>Service communicating with our backend ^ | v Store <----- | | v | Switcher ----> ^ | | User input </pre> <p>我們看到這個數據流都是一個方向流動的,并且在我們的系統中,不需要同步兩個部分(或者更多部分)。單向數據流不止能基于 React 應用,這些就是它讓應用變得更簡單的原因,這個模式可能還需要更多的實踐,但是它是確實值得探索的。</p> <b>六、結語</b> <p>當然,這不是在 React 中所有的設計模式/技術。還可能有更多的模式,你能夠 checkout github.com/krasimir/react-in-patterns 進行更新。我將努力分享我新的發現。</p> </div> <div id="jbnh5ph" class="mt-64 tags-seach" > <div id="lvdbntb" class="tags-info"> <a style="width:120px;" title="GPU云服務器" href="http://specialneedsforspecialkids.com/site/product/gpu.html">GPU云服務器</a> <a style="width:120px;" title="云服務器" href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo">云服務器</a> <a style="width:120px;" title="React.js" href="http://specialneedsforspecialkids.com/yun/tag/React.js/">React.js</a> <a style="width:120px;" title="react.js cdn" href="http://specialneedsforspecialkids.com/yun/tag/react.js cdn/">react.js cdn</a> <a style="width:120px;" title="linux下編譯阿里" href="http://specialneedsforspecialkids.com/yun/tag/linuxxiabianyiali/">linux下編譯阿里</a> <a style="width:120px;" title="linux下編譯運行" href="http://specialneedsforspecialkids.com/yun/tag/linuxxiabianyiyunxing/">linux下編譯運行</a> </div> </div> <div id="d7xhbhn" class="entry-copyright mb-30"> <p class="mb-15"> 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。</p> <p>轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80344.html</p> </div> <ul class="pre-next-page"> <li id="xhhrd7p" class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/80343.html">上一篇:關于easyui datebox 的選擇器,屬性 以及 取值。</a></li> <li id="hhr5pvn" class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/80345.html">下一篇:《JavaScript 闖關記》之對象</a></li> </ul> </div> <div id="nnjhfnt" class="about_topicone-mid"> <h3 class="top-com-title mb-0"><span data-id="0">相關文章</span></h3> <ul class="com_white-left-mid atricle-list-box"> <li> <div id="tf57jbz" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/85537.html"><b>Flux再進化:Introducing Relay and GraphQL<em>譯</em></b></a></h2> <p class="ellipsis2 good">摘要:它的設計使得即使是大型團隊也能以高度隔離的方式應對功能變更。獲取數據數據變更性能,都是讓人頭痛的問題。通過維護組件與數據間的依賴在依賴的數據就緒前組件不會被渲染為開發者提供更加可預測的開發環境。這杜絕了隱式的數據依賴導致的潛在。 關于Relay與GraphQL的介紹 原文:Introducing Relay and GraphQL 視頻地址(強烈建議觀看):https://www.y...</p> <div id="bnjd5rb" class="com_white-left-info"> <div id="7tlxthb" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1134.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/11/small_000001134.jpg" alt=""><span id="zjtzjvt" class="layui-hide64">cncoder</span></a> <time datetime="">2019-08-21 10:26</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="vd5ftbj" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/111422.html"><b>即將立秋的《課多周刊》(第2期)</b></a></h2> <p class="ellipsis2 good">摘要:即將立秋的課多周刊第期我們的微信公眾號,更多精彩內容皆在微信公眾號,歡迎關注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。課多周刊機器人運營中心是如何玩轉起來的分享課多周刊是如何運營并堅持下來的。 即將立秋的《課多周刊》(第2期) 我們的微信公眾號:fed-talk,更多精彩內容皆在微信公眾號,歡迎關注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大...</p> <div id="zjrlfzf" class="com_white-left-info"> <div id="jtrrbtz" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1533.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/15/small_000001533.jpg" alt=""><span id="l5vffvn" class="layui-hide64">ruicbAndroid</span></a> <time datetime="">2019-08-29 11:06</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="htdljrl" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/80060.html"><b>即將立秋的《課多周刊》(第2期)</b></a></h2> <p class="ellipsis2 good">摘要:即將立秋的課多周刊第期我們的微信公眾號,更多精彩內容皆在微信公眾號,歡迎關注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。課多周刊機器人運營中心是如何玩轉起來的分享課多周刊是如何運營并堅持下來的。 即將立秋的《課多周刊》(第2期) 我們的微信公眾號:fed-talk,更多精彩內容皆在微信公眾號,歡迎關注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大...</p> <div id="rzhjpjd" class="com_white-left-info"> <div id="xrbx5x5" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1584.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/15/small_000001584.jpg" alt=""><span id="flhnr5z" class="layui-hide64">MRZYD</span></a> <time datetime="">2019-08-20 10:14</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="jtpz5d5" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/79580.html"><b>[<em>譯</em>] 前端攻略-從路人甲到英雄無敵二:JavaScript 與不斷演化的框架</b></a></h2> <p class="ellipsis2 good">摘要:一般來說,聲明式編程關注于發生了啥,而命令式則同時關注與咋發生的。聲明式編程可以較好地解決這個問題,剛才提到的比較麻煩的元素選擇這個動作可以交托給框架或者庫區處理,這樣就能讓開發者專注于發生了啥,這里推薦一波與。 本文翻譯自FreeCodeCamp的from-zero-to-front-end-hero-part。 繼續譯者的廢話,這篇文章是前端攻略-從路人甲到英雄無敵的下半部分,在...</p> <div id="lhfpbf5" class="com_white-left-info"> <div id="pbnldtn" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1389.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/13/small_000001389.jpg" alt=""><span id="vrnvrjn" class="layui-hide64">roadtogeek</span></a> <time datetime="">2019-08-19 18:25</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> </ul> </div> <div id="7hnvdjx" class="topicone-box-wangeditor"> <h3 class="top-com-title mb-64"><span>發表評論</span></h3> <div id="rlhdnp5" class="xcp-publish-main flex_box_zd"> <div id="hpnxfx5" class="unlogin-pinglun-box"> <a href="javascript:login()" class="grad">登陸后可評論</a> </div> </div> </div> <div id="bjhdv5d" class="site-box-content"> <div id="fbjtrzr" class="site-content-title"> <h3 class="top-com-title mb-64"><span>0條評論</span></h3> </div> <div id="jzl55nv" class="pages"></ul></div> </div> </div> <div id="vn7plp5" class="layui-col-md4 layui-col-lg3 com_white-right site-wrap-right"> <div id="7tdnlrj" class=""> <div id="7759hpf" class="com_layuiright-box user-msgbox"> <a href="http://specialneedsforspecialkids.com/yun/u-687.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/06/small_000000687.jpg" alt=""></a> <h3><a href="http://specialneedsforspecialkids.com/yun/u-687.html" rel="nofollow">mumumu</a></h3> <h6>男<span>|</span>高級講師</h6> <div id="7zjd5bx" class="flex_box_zd user-msgbox-atten"> <a href="javascript:attentto_user(687)" id="attenttouser_687" class="grad follow-btn notfollow attention">我要關注</a> <a href="javascript:login()" title="發私信" >我要私信</a> </div> <div id="vb7bzfn" class="user-msgbox-list flex_box_zd"> <h3 class="hpf">TA的文章</h3> <a href="http://specialneedsforspecialkids.com/yun/ut-687.html" class="box_hxjz">閱讀更多</a> </div> <ul class="user-msgbox-ul"> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/122316.html">軟件測試就是簡單的點點點嗎???</a></h3> <p>閱讀 2067<span>·</span>2021-10-12 10:12</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/120914.html">??程序人生 | 為什么越來越多的人用Python來做自動化測試?</a></h3> <p>閱讀 788<span>·</span>2021-09-24 09:47</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/118309.html">CUBECLOUD:六周年慶鉅惠,洛杉磯VPS套餐年付五折,全場85折優惠</a></h3> <p>閱讀 1187<span>·</span>2021-08-19 11:12</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/112373.html">Typecho 主題制作記錄</a></h3> <p>閱讀 3461<span>·</span>2019-08-29 13:06</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/107440.html">原生js實現省市區三級聯動插件</a></h3> <p>閱讀 681<span>·</span>2019-08-26 11:43</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/104182.html">2分鐘通過javascript的opener方式實現調用父窗口方法示例</a></h3> <p>閱讀 2563<span>·</span>2019-08-23 17:20</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/103429.html">ReactElement源碼解析</a></h3> <p>閱讀 1146<span>·</span>2019-08-23 16:52</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/100641.html">放棄jQuery, 使用原生js</a></h3> <p>閱讀 2593<span>·</span>2019-08-23 14:27</p></li> </ul> </div> <!-- 文章詳情右側廣告--> <div id="xtd7p5l" class="com_layuiright-box"> <h6 class="top-com-title"><span>最新活動</span></h6> <div id="nhtdrxt" class="com_adbox"> <div id="7xd5rj5" class="layui-carousel" id="right-item"> <div carousel-item> <div> <a href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo" rel="nofollow"> <img src="http://specialneedsforspecialkids.com/yun/data/attach/240625/2rTjEHmi.png" alt="云服務器"> </a> </div> <div> <a href="http://specialneedsforspecialkids.com/site/product/gpu.html" rel="nofollow"> <img src="http://specialneedsforspecialkids.com/yun/data/attach/240807/7NjZjdrd.png" alt="GPU云服務器"> </a> </div> </div> </div> </div> <!-- banner結束 --> <div id="bhz55dt" class="adhtml"> </div> <script> $(function(){ $.ajax({ type: "GET", url:"http://specialneedsforspecialkids.com/yun/ad/getad/1.html", cache: false, success: function(text){ $(".adhtml").html(text); } }); }) </script> </div> </div> </div> </div> </div> </section> <!-- wap拉出按鈕 --> <div id="bfplbt5" class="site-tree-mobile layui-hide"> <i class="layui-icon layui-icon-spread-left"></i> </div> <!-- wap遮罩層 --> <div id="vrzlx5f" class="site-mobile-shade"></div> <!--付費閱讀 --> <div class="95nlhxf" id="payread"> <div id="xtrzlph" class="layui-form-item">閱讀需要支付1元查看</div> <div id="hjbjtnj" class="layui-form-item"><button class="btn-right">支付并查看</button></div> </div> <script> var prei=0; $(".site-seo-depict pre").each(function(){ var html=$(this).html().replace("<code>","").replace("</code>","").replace('<code class="javascript hljs" codemark="1">',''); $(this).attr('data-clipboard-text',html).attr("id","pre"+prei); $(this).html("").append("<code>"+html+"</code>"); prei++; }) $(".site-seo-depict img").each(function(){ if($(this).attr("src").indexOf('data:image/svg+xml')!= -1){ $(this).remove(); } }) $("LINK[href*='style-49037e4d27.css']").remove(); $("LINK[href*='markdown_views-d7a94ec6ab.css']").remove(); layui.use(['jquery', 'layer','code'], function(){ $("pre").attr("class","layui-code"); $("pre").attr("lay-title",""); $("pre").attr("lay-skin",""); layui.code(); $(".layui-code-h3 a").attr("class","copycode").html("復制代碼 ").attr("onclick","copycode(this)"); }); function copycode(target){ var id=$(target).parent().parent().attr("id"); var clipboard = new ClipboardJS("#"+id); clipboard.on('success', function(e) { e.clearSelection(); alert("復制成功") }); clipboard.on('error', function(e) { alert("復制失敗") }); } //$(".site-seo-depict").html($(".site-seo-depict").html().slice(0, -5)); </script> <link rel="stylesheet" type="text/css" href="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/styles/tomorrow-night-eighties.css"> <script src="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/highlight.pack.js" type="text/javascript"></script> <script src="http://specialneedsforspecialkids.com/yun/static/js/clipboard.js"></script> <script>hljs.initHighlightingOnLoad();</script> <script> function setcode(){ var _html=''; document.querySelectorAll('pre code').forEach((block) => { var _tmptext=$.trim($(block).text()); if(_tmptext!=''){ _html=_html+_tmptext; console.log(_html); } }); } </script> <script> function payread(){ layer.open({ type: 1, title:"付費閱讀", shadeClose: true, content: $('#payread') }); } // 舉報 function jupao_tip(){ layer.open({ type: 1, title:false, shadeClose: true, content: $('#jubao') }); } $(".getcommentlist").click(function(){ var _id=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); $("#articlecommentlist"+_id).toggleClass("hide"); var flag=$("#articlecommentlist"+_id).attr("dataflag"); if(flag==1){ flag=0; }else{ flag=1; //加載評論 loadarticlecommentlist(_id,_tid); } $("#articlecommentlist"+_id).attr("dataflag",flag); }) $(".add-comment-btn").click(function(){ var _id=$(this).attr("dataid"); $(".formcomment"+_id).toggleClass("hide"); }) $(".btn-sendartcomment").click(function(){ var _aid=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); var _content=$.trim($(".commenttext"+_aid).val()); if(_content==''){ alert("評論內容不能為空"); return false; } var touid=$("#btnsendcomment"+_aid).attr("touid"); if(touid==null){ touid=0; } addarticlecomment(_tid,_aid,_content,touid); }) $(".button_agree").click(function(){ var supportobj = $(this); var tid = $(this).attr("id"); $.ajax({ type: "GET", url:"http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxhassupport/" + tid, cache: false, success: function(hassupport){ if (hassupport != '1'){ $.ajax({ type: "GET", cache:false, url: "http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxaddsupport/" + tid, success: function(comments) { supportobj.find("span").html(comments+"人贊"); } }); }else{ alert("您已經贊過"); } } }); }); function attenquestion(_tid,_rs){ $.ajax({ //提交數據的類型 POST GET type:"POST", //提交的網址 url:"http://specialneedsforspecialkids.com/yun/favorite/topicadd.html", //提交的數據 data:{tid:_tid,rs:_rs}, //返回數據的格式 datatype: "json",//"xml", "html", "script", "json", "jsonp", "text". //在請求之前調用的函數 beforeSend:function(){}, //成功返回之后調用的函數 success:function(data){ var data=eval("("+data+")"); console.log(data) if(data.code==2000){ layer.msg(data.msg,function(){ if(data.rs==1){ //取消收藏 $(".layui-layer-tips").attr("data-tips","收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart-o"></i>'); } if(data.rs==0){ //收藏成功 $(".layui-layer-tips").attr("data-tips","已收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart"></i>') } }) }else{ layer.msg(data.msg) } } , //調用執行后調用的函數 complete: function(XMLHttpRequest, textStatus){ postadopt=true; }, //調用出錯執行的函數 error: function(){ //請求出錯處理 postadopt=false; } }); } </script> <footer> <div id="tbhbnhb" class="layui-container"> <div id="lpppbt7" class="flex_box_zd"> <div id="x557ptx" class="left-footer"> <h6><a href="http://specialneedsforspecialkids.com/"><img src="http://specialneedsforspecialkids.com/yun/static/theme/ukd//images/logo.png" alt="UCloud (優刻得科技股份有限公司)"></a></h6> <p>UCloud (優刻得科技股份有限公司)是中立、安全的云計算服務平臺,堅持中立,不涉足客戶業務領域。公司自主研發IaaS、PaaS、大數據流通平臺、AI服務平臺等一系列云計算產品,并深入了解互聯網、傳統企業在不同場景下的業務需求,提供公有云、混合云、私有云、專有云在內的綜合性行業解決方案。</p> </div> <div id="zvr5pf5" class="right-footer layui-hidemd"> <ul class="flex_box_zd"> <li> <h6>UCloud與云服務</h6> <p><a href="http://specialneedsforspecialkids.com/site/about/intro/">公司介紹</a></p> <p><a >加入我們</a></p> <p><a href="http://specialneedsforspecialkids.com/site/ucan/onlineclass/">UCan線上公開課</a></p> <p><a href="http://specialneedsforspecialkids.com/site/solutions.html" >行業解決方案</a></p> <p><a href="http://specialneedsforspecialkids.com/site/pro-notice/">產品動態</a></p> </li> <li> <h6>友情鏈接</h6> <p><a >GPU算力平臺</a></p> <p><a >UCloud私有云</a></p> <p><a >SurferCloud</a></p> <p><a >工廠仿真軟件</a></p> <p><a >Pinex</a></p> <p><a >AI繪畫</a></p> </li> <li> <h6>社區欄目</h6> <p><a href="http://specialneedsforspecialkids.com/yun/column/index.html">專欄文章</a></p> <p><a href="http://specialneedsforspecialkids.com/yun/udata/">專題地圖</a></p> </li> <li> <h6>常見問題</h6> <p><a href="http://specialneedsforspecialkids.com/site/ucsafe/notice.html" >安全中心</a></p> <p><a href="http://specialneedsforspecialkids.com/site/about/news/recent/" >新聞動態</a></p> <p><a href="http://specialneedsforspecialkids.com/site/about/news/report/">媒體動態</a></p> <p><a href="http://specialneedsforspecialkids.com/site/cases.html">客戶案例</a></p> <p><a href="http://specialneedsforspecialkids.com/site/notice/">公告</a></p> </li> <li> <span><img src="https://static.ucloud.cn/7a4b6983f4b94bcb97380adc5d073865.png" alt="優刻得"></span> <p>掃掃了解更多</p></div> </div> <div id="nxvfrt5" class="copyright">Copyright ? 2012-2023 UCloud 優刻得科技股份有限公司<i>|</i><a rel="nofollow" >滬公網安備 31011002000058號</a><i>|</i><a rel="nofollow" ></a> 滬ICP備12020087號-3</a><i>|</i> <script type="text/javascript" src="https://gyfk12.kuaishang.cn/bs/ks.j?cI=197688&fI=125915" charset="utf-8"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?290c2650b305fc9fff0dbdcafe48b59d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-DZSMXQ3P9N"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-DZSMXQ3P9N'); </script> <script> (function(){ var el = document.createElement("script"); el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?99f50ea166557aed914eb4a66a7a70a4709cbb98a54ecb576877d99556fb4bfc3d72cd14f8a76432df3935ab77ec54f830517b3cb210f7fd334f50ccb772134a"; el.id = "ttzz"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(el, s); })(window) </script></div> </div> </footer> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://specialneedsforspecialkids.com/" title="国产xxxx99真实实拍">国产xxxx99真实实拍</a> <div class="friend-links"> <a href="http://belistarlp.com/">国产黄色在线</a> </div> </div> </footer> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body><div id="ttflr" class="pl_css_ganrao" style="display: none;"><small id="ttflr"><menuitem id="ttflr"></menuitem></small><legend id="ttflr"><th id="ttflr"><b id="ttflr"><mark id="ttflr"></mark></b></th></legend><progress id="ttflr"></progress><strike id="ttflr"><strong id="ttflr"></strong></strike><strong id="ttflr"></strong><listing id="ttflr"><dfn id="ttflr"></dfn></listing><progress id="ttflr"><dl id="ttflr"><legend id="ttflr"><th id="ttflr"></th></legend></dl></progress><address id="ttflr"><legend id="ttflr"></legend></address><div id="ttflr"><ol id="ttflr"><style id="ttflr"><nobr id="ttflr"></nobr></style></ol></div><ins id="ttflr"><address id="ttflr"><legend id="ttflr"><sup id="ttflr"></sup></legend></address></ins><output id="ttflr"><sub id="ttflr"><strike id="ttflr"><strong id="ttflr"></strong></strike></sub></output><video id="ttflr"><em id="ttflr"><div id="ttflr"><ol id="ttflr"></ol></div></em></video><sup id="ttflr"><form id="ttflr"></form></sup><font id="ttflr"><legend id="ttflr"><sup id="ttflr"><style id="ttflr"></style></sup></legend></font><dfn id="ttflr"><output id="ttflr"><span id="ttflr"><thead id="ttflr"></thead></span></output></dfn><div id="ttflr"><sup id="ttflr"></sup></div><em id="ttflr"></em><dfn id="ttflr"><output id="ttflr"><span id="ttflr"><thead id="ttflr"></thead></span></output></dfn><b id="ttflr"><progress id="ttflr"></progress></b><listing id="ttflr"></listing><small id="ttflr"></small><mark id="ttflr"><form id="ttflr"></form></mark><listing id="ttflr"><dfn id="ttflr"></dfn></listing><nobr id="ttflr"><small id="ttflr"><output id="ttflr"><sub id="ttflr"></sub></output></small></nobr><dfn id="ttflr"><output id="ttflr"><sub id="ttflr"><thead id="ttflr"></thead></sub></output></dfn><label id="ttflr"></label><ins id="ttflr"><acronym id="ttflr"><legend id="ttflr"><th id="ttflr"></th></legend></acronym></ins><style id="ttflr"><video id="ttflr"><em id="ttflr"><meter id="ttflr"></meter></em></video></style><em id="ttflr"><meter id="ttflr"></meter></em><th id="ttflr"><b id="ttflr"><progress id="ttflr"><form id="ttflr"></form></progress></b></th><span id="ttflr"><i id="ttflr"><listing id="ttflr"><dfn id="ttflr"></dfn></listing></i></span><sub id="ttflr"><thead id="ttflr"></thead></sub><dfn id="ttflr"><menuitem id="ttflr"><span id="ttflr"><thead id="ttflr"></thead></span></menuitem></dfn><legend id="ttflr"><dfn id="ttflr"></dfn></legend><p id="ttflr"><var id="ttflr"></var></p><nobr id="ttflr"><em id="ttflr"><meter id="ttflr"><span id="ttflr"></span></meter></em></nobr><optgroup id="ttflr"></optgroup><legend id="ttflr"></legend><pre id="ttflr"><i id="ttflr"></i></pre><strong id="ttflr"><ruby id="ttflr"></ruby></strong><var id="ttflr"><u id="ttflr"><ins id="ttflr"><address id="ttflr"></address></ins></u></var><strike id="ttflr"><strong id="ttflr"></strong></strike><i id="ttflr"><nobr id="ttflr"><small id="ttflr"><output id="ttflr"></output></small></nobr></i><optgroup id="ttflr"><output id="ttflr"><sub id="ttflr"><thead id="ttflr"></thead></sub></output></optgroup><legend id="ttflr"><sup id="ttflr"><label id="ttflr"><video id="ttflr"></video></label></sup></legend><div id="ttflr"><var id="ttflr"><label id="ttflr"><video id="ttflr"></video></label></var></div><big id="ttflr"><label id="ttflr"></label></big><dl id="ttflr"><pre id="ttflr"></pre></dl><address id="ttflr"></address><span id="ttflr"><i id="ttflr"><listing id="ttflr"><dfn id="ttflr"></dfn></listing></i></span><pre id="ttflr"><track id="ttflr"></track></pre><div id="ttflr"></div><legend id="ttflr"><dfn id="ttflr"><b id="ttflr"><ins id="ttflr"></ins></b></dfn></legend><strong id="ttflr"><track id="ttflr"></track></strong><small id="ttflr"><meter id="ttflr"><pre id="ttflr"><i id="ttflr"></i></pre></meter></small><small id="ttflr"><menuitem id="ttflr"></menuitem></small><u id="ttflr"><ins id="ttflr"></ins></u><dfn id="ttflr"><b id="ttflr"></b></dfn><form id="ttflr"></form><listing id="ttflr"><small id="ttflr"></small></listing><form id="ttflr"><ins id="ttflr"><address id="ttflr"><legend id="ttflr"></legend></address></ins></form><form id="ttflr"><legend id="ttflr"></legend></form><form id="ttflr"></form><optgroup id="ttflr"><track id="ttflr"></track></optgroup><style id="ttflr"><nobr id="ttflr"><small id="ttflr"><menuitem id="ttflr"></menuitem></small></nobr></style><menuitem id="ttflr"><pre id="ttflr"></pre></menuitem><acronym id="ttflr"><legend id="ttflr"><th id="ttflr"><tt id="ttflr"></tt></th></legend></acronym><p id="ttflr"></p><em id="ttflr"></em><track id="ttflr"><tt id="ttflr"><progress id="ttflr"><acronym id="ttflr"></acronym></progress></tt></track><small id="ttflr"><menuitem id="ttflr"></menuitem></small><rp id="ttflr"><em id="ttflr"></em></rp><nobr id="ttflr"><em id="ttflr"><div id="ttflr"><pre id="ttflr"></pre></div></em></nobr><address id="ttflr"></address><ins id="ttflr"><acronym id="ttflr"><legend id="ttflr"><dfn id="ttflr"></dfn></legend></acronym></ins><span id="ttflr"><strike id="ttflr"><strong id="ttflr"><strong id="ttflr"></strong></strong></strike></span><i id="ttflr"></i><menuitem id="ttflr"><pre id="ttflr"><i id="ttflr"><strong id="ttflr"></strong></i></pre></menuitem><strong id="ttflr"><ruby id="ttflr"></ruby></strong><ins id="ttflr"><address id="ttflr"></address></ins><dl id="ttflr"><pre id="ttflr"></pre></dl><dl id="ttflr"><strong id="ttflr"><track id="ttflr"><thead id="ttflr"></thead></track></strong></dl><thead id="ttflr"></thead><legend id="ttflr"><sup id="ttflr"><label id="ttflr"><nobr id="ttflr"></nobr></label></sup></legend><div id="ttflr"><ol id="ttflr"><form id="ttflr"><video id="ttflr"></video></form></ol></div><ol id="ttflr"><label id="ttflr"></label></ol><output id="ttflr"><span id="ttflr"><strike id="ttflr"><listing id="ttflr"></listing></strike></span></output><nobr id="ttflr"><em id="ttflr"><menuitem id="ttflr"><span id="ttflr"></span></menuitem></em></nobr><tt id="ttflr"></tt><sup id="ttflr"></sup><i id="ttflr"><nobr id="ttflr"><dfn id="ttflr"><output id="ttflr"></output></dfn></nobr></i><ol id="ttflr"></ol><legend id="ttflr"></legend><em id="ttflr"><meter id="ttflr"></meter></em><small id="ttflr"><meter id="ttflr"></meter></small><pre id="ttflr"><dfn id="ttflr"><u id="ttflr"><mark id="ttflr"></mark></u></dfn></pre><form id="ttflr"><legend id="ttflr"></legend></form><strong id="ttflr"></strong><i id="ttflr"></i><style id="ttflr"><video id="ttflr"><em id="ttflr"><menuitem id="ttflr"></menuitem></em></video></style><track id="ttflr"></track><i id="ttflr"><nobr id="ttflr"><small id="ttflr"><menuitem id="ttflr"></menuitem></small></nobr></i><var id="ttflr"><u id="ttflr"></u></var><b id="ttflr"></b><i id="ttflr"><listing id="ttflr"></listing></i><thead id="ttflr"><thead id="ttflr"><label id="ttflr"><optgroup id="ttflr"></optgroup></label></thead></thead><sup id="ttflr"></sup><thead id="ttflr"><label id="ttflr"><strong id="ttflr"><ruby id="ttflr"></ruby></strong></label></thead><video id="ttflr"><em id="ttflr"><div id="ttflr"><ol id="ttflr"></ol></div></em></video><mark id="ttflr"><acronym id="ttflr"><legend id="ttflr"><dfn id="ttflr"></dfn></legend></acronym></mark><mark id="ttflr"></mark><style id="ttflr"><nobr id="ttflr"><em id="ttflr"><menuitem id="ttflr"></menuitem></em></nobr></style><tt id="ttflr"></tt><th id="ttflr"></th><thead id="ttflr"><label id="ttflr"><strong id="ttflr"><track id="ttflr"></track></strong></label></thead><label id="ttflr"></label><strike id="ttflr"></strike><output id="ttflr"><sub id="ttflr"></sub></output><legend id="ttflr"><sup id="ttflr"><label id="ttflr"><rp id="ttflr"></rp></label></sup></legend><big id="ttflr"></big><i id="ttflr"></i><th id="ttflr"><thead id="ttflr"></thead></th><progress id="ttflr"><acronym id="ttflr"></acronym></progress><form id="ttflr"></form><label id="ttflr"></label><tt id="ttflr"></tt><th id="ttflr"><b id="ttflr"><mark id="ttflr"><form id="ttflr"></form></mark></b></th><label id="ttflr"></label><optgroup id="ttflr"><ruby id="ttflr"></ruby></optgroup><track id="ttflr"><tt id="ttflr"><progress id="ttflr"><form id="ttflr"></form></progress></tt></track><progress id="ttflr"></progress><form id="ttflr"><ins id="ttflr"></ins></form><sub id="ttflr"></sub><strong id="ttflr"><optgroup id="ttflr"><output id="ttflr"><thead id="ttflr"></thead></output></optgroup></strong><u id="ttflr"><ins id="ttflr"><address id="ttflr"><legend id="ttflr"></legend></address></ins></u><thead id="ttflr"><label id="ttflr"><strong id="ttflr"><th id="ttflr"></th></strong></label></thead><sup id="ttflr"><form id="ttflr"></form></sup><ruby id="ttflr"></ruby><dfn id="ttflr"></dfn><address id="ttflr"><legend id="ttflr"></legend></address><big id="ttflr"><dl id="ttflr"><pre id="ttflr"><th id="ttflr"></th></pre></dl></big><thead id="ttflr"></thead><sub id="ttflr"><thead id="ttflr"><strong id="ttflr"><optgroup id="ttflr"></optgroup></strong></thead></sub><acronym id="ttflr"></acronym><big id="ttflr"><dl id="ttflr"></dl></big><sup id="ttflr"><label id="ttflr"><video id="ttflr"><em id="ttflr"></em></video></label></sup><rp id="ttflr"><font id="ttflr"></font></rp><strong id="ttflr"></strong><dfn id="ttflr"><output id="ttflr"><sub id="ttflr"><thead id="ttflr"></thead></sub></output></dfn><address id="ttflr"></address></div> <script src="http://specialneedsforspecialkids.com/yun/static/theme/ukd/js/common.js"></script> <<script type="text/javascript"> $(".site-seo-depict *,.site-content-answer-body *,.site-body-depict *").css("max-width","100%"); </script> </html>