CMUI / underscore.ext

[Deprecated] Please use `Gearbox` instead.
https://github.com/CMUI/gearbox
2 stars 3 forks source link

API 文档 - `url` 模块 #56

Open cssmagic opened 9 years ago

cssmagic commented 9 years ago

API 文档 - url 模块

JavaScript 接口

_.url.parseQuery(query)

把 query string 解析为以对象的方式保存的名值对。

参数

对象。解析结果,以名值对的方式保存。

注意事项

_.url.parseQuery('foo=1&bar=2')  // => {foo: '1', bar: '2'}
_.url.parseQuery('foo=&bar=2')  // => {foo: '', bar: '2'}
_.url.parseQuery('foo&bar=2')  // => {foo: '', bar: '2'}
_.url.parseQuery('')  // => {}

_.url.getParam(key)

获取当前页面的某个 URL 参数的值。(“URL 参数” 即为 query string 中的名值对。)

参数

字符串或 undefined。对应 URL 参数的值。

注意事项

假设当前页面的 URL 为 http://domain.com/path/file?foo&bar=2,此时:

_.url.parseQuery('foo')  // => ''
_.url.parseQuery('bar')  // => '2'
_.url.parseQuery('absentKey')  // => undefined

_.url.appendParam(url, param)

为给定的 URL 附加新的参数。

参数

字符串。已附加 URL 参数的新的 URL。

示例

var url = 'http://domain.com/path/file'
url = _.url.appendParam(url, {foo: 'bar'})  // => 'http://domain.com/path/file?foo=bar'
url = _.url.appendParam(url, {test: 1})  // => 'http://domain.com/path/file?foo=bar&test=1'

_.url.parseUrl(url, [part])

解析 URL 的各个组成部分。URL 各个组成部分的名称及含义如下:

可以看出它们和 location 对象的各个 key 的含义相同。

参数

var url = 'http://domain.com/foo/bar'
_.url.parseUrl(url)  // => {
//     protocol: 'http:',
//     hostname: 'domain.com',
//     port: '',
//     host: 'domain.com',
//     pathname: '/foo/bar',
//     search: '',
//     hash: '',
// }

_.url.parseUrl(url, 'pathname')  // => '/foo/bar'
_.url.parseUrl(url, 'search')  // => ''
cssmagic commented 9 years ago

以下是未开公、未确定的接口。可能有部分特性还未实现。

JavaScript 接口

_.url.composeUrl(parts)

根据提供的 URL 各个要素,构造完整的 URL。URL 各个组成部分的名称及含义同 _.url.parseUrl() 接口的描述。

参数

返回值

字符串。构造出的完整 URL。

当参数不合法时,返回空字符串。

注意事项

示例

var urlParts = {
    protocol: 'http:',
    host: 'domain.com',
    pathname: '/foo/bar'
}
_.url.composeUrl(urlParts)  // => 'http://domain.com/foo/bar'

_.url.removeHashFromUrl(url)

把 URL 中的 hash 部分去除。

参数

返回值

字符串。若参数不合法则返回空字符串。

示例

var url = 'http://domain.com/foo#bar'
_.url.composeUrl(url)  // => 'http://domain.com/foo'

_.url.getHashFromUrl(url)

获取 URL 中的 hash 部分。获取结果包含开头的 # 字符。

若需要得到当前页面 URL 的 hash 部分,请直接使用 location.hash

参数

返回值

字符串。若参数不合法则返回空字符串;若 URL 中不包含 hash 部分则返回空字符串。

示例

var url = 'http://domain.com/foo#bar'
_.url.getHashFromUrl(url)  // => '#bar'

_.url.getHashFromLink(link)

获取指定链接的 href 属性值中的 hash 部分。获取结果包含开头的 # 字符。

参数

返回值

字符串。若参数不合法则返回空字符串;若元素的 href 属性值中不包含 hash 部分则返回空字符串。

示例

<a id="test" href="foo.html#bar">test link</a>
var elem = document.getElementById('test')
_.url.getHashFromLink(href)  // => '#bar'

别名

_.url.isHash

_.str.isHash() 的别名。

_.url.stripHash

_.str.stripHash() 的别名。

_.url.isFullUrl

_.str.isFullUrl() 的别名。

_.url.isAbsolutePath

_.str.isAbsolutePath() 的别名。

hax commented 9 years ago

总体上最好需要 follow 某种惯用 API,以减少学习成本和方便记忆。 可以考虑 whatwg URL spec( https://url.spec.whatwg.org/#api ) 或 nodejs 的 API( https://iojs.org/api/url.html

hax commented 9 years ago

_.url.isInFrame 在 url 下似乎有点诡异。

cssmagic commented 9 years ago

_.url.isInFrame 在 url 下似乎有点诡异。

:smile: 是的,略诡异。好几年前不严谨的 API 组织方式一直残留下来。不过暂时也想不出放进哪个模块(命名空间)更适合。改成 _.env.isInFrame 是不是更好?不过单独为它建个模块又觉得略蛋疼。

另外还想把这种预定义的变量(属性)改成方法:.isInFrame()

cssmagic commented 9 years ago

决定暂时删掉 _.url.isInFrame 这个 API。