Mojo::DOM

Mojo::DOM 是一個(gè)有CSS選擇器支持的瓦呼,簡(jiǎn)約的HTML/XML DOM解析器。它會(huì)嘗試解釋不正常的HTML和XML船万,所以你不應(yīng)該使用它進(jìn)行HTML和XML語(yǔ)法正確性的驗(yàn)證愉适。

簡(jiǎn)介

當(dāng)我們解析HTML/XML片段時(shí),它會(huì)變成一個(gè)節(jié)點(diǎn)樹(shù)住诸。目前有八種不同類(lèi)型的節(jié)點(diǎn),它們分別是:cdata簇捍、comment、doctype俏拱、pi暑塑、raw、root锅必、tag事格、text惕艳。元素是類(lèi)型為tag的節(jié)點(diǎn)。

雖然所有節(jié)點(diǎn)類(lèi)型都表示為Mojo::DOM對(duì)象驹愚,但像"attr"和"namespace"這樣的方法只適用于元素操作远搪。

<!DOCTYPE html>
<html>
  <head><title>Hello</title></head>
  <body>World!</body>
</html>         

## 以上html代碼會(huì)被解析成如下節(jié)點(diǎn)樹(shù)

root
|- doctype (html)
+- tag (html)
   |- tag (head)
   |  +- tag (title)
   |     +- raw (Hello)
   +- tag (body)
      +- text (World!)

大小寫(xiě)敏感

Mojo::DOM 默認(rèn)為HTML語(yǔ)義,也就是說(shuō)所有標(biāo)簽和屬性名都是小寫(xiě)的逢捺,并且選擇器也是小寫(xiě)的谁鳍。

# HTML semantics
my $dom = Mojo::DOM->new('<P ID="greeting">Hi!</P>');
say $dom->at('p[id]')->text;

如果發(fā)現(xiàn)代碼中有XML聲明,解析器將自動(dòng)切換到XML模式劫瞳,并且所有內(nèi)容都會(huì)區(qū)分大小寫(xiě)倘潜。

# XML semantics
my $dom = Mojo::DOM->new('<?xml version="1.0"?><P ID="greeting">Hi!</P>');
say $dom->at('P[ID]')->text;

使用xml方法可以強(qiáng)制使用HTML或XML模式。

# Force HTML semantics
my $dom = Mojo::DOM->new->xml(0)->parse('<P ID="greeting">Hi!</P>');
say $dom->at('p[id]')->text;

# Force XML semantics
my $dom = Mojo::DOM->new->xml(1)->parse('<P ID="greeting">Hi!</P>');
say $dom->at('P[ID]')->text;

方法

Mojo::DOM 模塊中實(shí)現(xiàn)了以下方法志于。

all_text

my $text = $dom->all_text;

從此元素的所有后代節(jié)點(diǎn)提取文本內(nèi)容涮因。

# "foo\nbarbaz\n"
$dom->parse("<div>foo\n<p>bar</p>baz\n</div>")->at('div')->all_text;

ancestors

my $collection = $dom->ancestors;
my $collection = $dom->ancestors('div ~ p');

查找與CSS選擇器匹配的此節(jié)點(diǎn)的所有祖先元素,并將包含這些元素的Mojo::Collection對(duì)象返回為Mojo::DOM對(duì)象伺绽。支持Mojo::DOM::CSS中的SELECTORS介紹的所有選擇器养泡。

# List tag names of ancestor elements
say $dom->ancestors->map('tag')->join("\n");

append

$dom = $dom->append('<p>I ? Mojolicious!</p>');

此方法可以在除root節(jié)點(diǎn)之外的其他所以類(lèi)型的節(jié)點(diǎn)后面添加HTML/XML代碼片段。

# "<div><h1>Test</h1><h2>123</h2></div>"
$dom->parse('<div><h1>Test</h1></div>') ->at('h1')->append('<h2>123</h2>')->root;

# "<p>Test 123</p>"
$dom->parse('<p>Test</p>')->at('p') ->child_nodes->first->append(' 123')->root;

append_content

$dom = $dom->append_content('<p>I ? Mojolicious!</p>');

在root或tag類(lèi)型節(jié)點(diǎn)的內(nèi)容后面添加HTML/XML代碼片段或“原始內(nèi)容”奈应。

# "<div><h1>Test123</h1></div>"
$dom->parse('<div><h1>Test</h1></div>') ->at('h1')->append_content('123')->root;

# "<!-- Test 123 --><br>"
$dom->parse('<!-- Test --><br>')->child_nodes->first->append_content('123 ')->root;

# "<p>Test<i>123</i></p>"
$dom->parse('<p>Test</p>')->at('p')->append_content('<i>123</i>')->root;

at

my $result = $dom->at('div ~ p');

查找$dom后代元素中與CSS選擇器匹配的元素澜掩,并把查找到的第一個(gè)符合要求的元素作為Mojo::DOM對(duì)象返回。當(dāng)找不到符合要求的元素時(shí)返回undef钥组。支持Mojo::DOM::CSS中所有的選擇器(SELECTORS)输硝。

# Find first element with "svg" namespace definition
my $namespace = $dom->at('[xmlns\:svg]')->{'xmlns:svg'};

attr

my $hash = $dom->attr;
my $foo  = $dom->attr('foo');
$dom     = $dom->attr({foo => 'bar'});
$dom     = $dom->attr(foo => 'bar');

對(duì)元素屬性的操作,可以獲取屬性值程梦,設(shè)置屬性值点把,刪除屬性值。

# Remove an attribute
delete $dom->attr->{id};

# Attribute without value
$dom->attr(selected => undef);

# List id attributes
say $dom->find('*')->map(attr => 'id')->compact->join("\n");

child_nodes

my $collection = $dom->child_nodes;

返回 Mojo::Collection對(duì)象屿附,該對(duì)象包含的是以Mojo::DOM對(duì)象存在的$dom元素的所有子節(jié)點(diǎn)郎逃。

# "<p><b>123</b></p>"
$dom->parse('<p>Test<b>123</b></p>')->at('p')->child_nodes->first->remove;

# "<!DOCTYPE html>"
$dom->parse('<!DOCTYPE html><b>123</b>')->child_nodes->first;

# " Test "
$dom->parse('<b>123</b><!-- Test -->')->child_nodes->last->content;

children

my $collection = $dom->children;
my $collection = $dom->children('div ~ p');

查找與CSS選擇器匹配的$dom元素的所有子元素。返回一個(gè)Mojo::Collection對(duì)象挺份,其中包含的是以Mojo::DOM對(duì)象表示的符合要求的元素褒翰。支持Mojo::DOM::CSS的SELECTORS中介紹的所有選擇器。

# Show tag name of random child element
say $dom->children->shuffle->first->tag;

content

my $str = $dom->content;
$dom    = $dom->content('<p>I ? Mojolicious!</p>');

返回$dom元素的內(nèi)容匀泊,或?qū)?dom中的內(nèi)容替換為指定的HTML/XML代碼片段或原始內(nèi)容优训。僅針對(duì)root和tag類(lèi)型的元素有效。

# "<b>Test</b>"
$dom->parse('<div><b>Test</b></div>')->at('div')->content;

# "<div><h1>123</h1></div>"
$dom->parse('<div><h1>Test</h1></div>')->at('h1')->content('123')->root;

# "<p><i>123</i></p>"
$dom->parse('<p>Test</p>')->at('p')->content('<i>123</i>')->root;

# "<div><h1></h1></div>"
$dom->parse('<div><h1>Test</h1></div>')->at('h1')->content('')->root;

# " Test "
$dom->parse('<!-- Test --><br>')->child_nodes->first->content;

# "<div><!-- 123 -->456</div>"
$dom->parse('<div><!-- Test -->456</div>')->at('div')->child_nodes->first->content(' 123 ')->root;

descendant_nodes

my $collection = $dom->descendant_nodes;

返回一個(gè)Mojo::Collection對(duì)象各聘,該對(duì)象中包含的是以Mojo::DOM對(duì)象表示的$dom元素的所有后代節(jié)點(diǎn)揣非。

# "<p><b>123</b></p>"
$dom->parse('<p><!-- Test --><b>123<!-- 456 --></b></p>')
->descendant_nodes->grep(sub { $_->type eq 'comment' })
->map('remove')->first;

# "<p><b>test</b>test</p>"
$dom->parse('<p><b>123</b>456</p>')
->at('p')->descendant_nodes->grep(sub { $_->type eq 'text' })
->map(content => 'test')->first->root;

find

my $collection = $dom->find('div ~ p');

查找與CSS選擇器匹配的$dom元素的所有后代元素。返回一個(gè)Mojo::Collection對(duì)象躲因,其中包含的是以Mojo::DOM對(duì)象表示的符合要求的元素早敬。支持Mojo::DOM::CSS的SELECTORS中介紹的所有選擇器忌傻。

# Find a specific element and extract information
my $id = $dom->find('div')->[23]{id};

# Extract information from multiple elements
my @headers = $dom->find('h1, h2, h3')->map('text')->each;

# Count all the different tags
my $hash = $dom->find('*')->reduce(sub { $a->{$b->tag}++; $a }, {});

# Find elements with a class that contains dots
my @divs = $dom->find('div.foo\.bar')->each;

following

my $collection = $dom->following;
my $collection = $dom->following('div ~ p');

查找與CSS選擇器匹配的$dom元素之后的所有同級(jí)元素。返回一個(gè)Mojo::Collection對(duì)象搞监,其中包含的是以Mojo::DOM對(duì)象表示的符合要求的元素水孩。支持Mojo::DOM::CSS的SELECTORS中介紹的所有選擇器矿酵。

# List tags of sibling elements after this node
say $dom->following->map('tag')->join("\n");

following_nodes

my $collection = $dom->following_nodes;

返回一個(gè)Mojo::Collection對(duì)象疲憋,其中包含以Mojo::DOM對(duì)象表示的$dom節(jié)點(diǎn)之后的所有兄弟節(jié)點(diǎn)。

# "C"
$dom->parse('<p>A</p><!-- B -->C')->at('p')->following_nodes->last->content;

matches

my $bool = $dom->matches('div ~ p');

查詢(xún)當(dāng)前元素是否與CSS選擇器匹配篇亭。支持Mojo::DOM::CSS的SELECTORS中介紹的所有選擇器棍矛。

# True
$dom->parse('<p class="a">A</p>')->at('p')->matches('.a');
$dom->parse('<p class="a">A</p>')->at('p')->matches('p[class]');

# False
$dom->parse('<p class="a">A</p>')->at('p')->matches('.b');
$dom->parse('<p class="a">A</p>')->at('p')->matches('p[id]');

namespace

my $namespace = $dom->namespace;

返回當(dāng)前元素的命名空間安疗,如果找不到則會(huì)把undef。

# Find namespace for an element with namespace prefix
my $namespace = $dom->at('svg > svg\:circle')->namespace;

# Find namespace for an element that may or may not have a namespace prefix
my $namespace = $dom->at('svg > circle')->namespace;

new

my $dom = Mojo::DOM->new;
my $dom = Mojo::DOM->new('<foo bar="baz">I ? Mojolicious!</foo>');

構(gòu)建一個(gè)新的基于標(biāo)題的Mojo::DOM對(duì)象够委,并在必要時(shí)解析HTML/XML代碼片段荐类。

next

my $sibling = $dom->next;

以Mojo::DOM對(duì)象的形式返回下一個(gè)同級(jí)元素,如果沒(méi)有則返回undef茁帽。

# "<h2>123</h2>"
$dom->parse('<div><h1>Test</h1><h2>123</h2></div>')->at('h1')->next;

next_node

my $sibling = $dom->next_node;

為下一個(gè)兄弟節(jié)點(diǎn)返回Mojo::DOM對(duì)象玉罐,如果找不到則返回undef。

# "456"
$dom->parse('<p><b>123</b><!-- Test -->456</p>')->at('b')->next_node->next_node;

# " Test "
$dom->parse('<p><b>123</b><!-- Test -->456</p>')->at('b')->next_node->content;

parent

my $parent = $dom->parent;

找到當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)潘拨,并以Mojo::DOM對(duì)象返回吊输,如果沒(méi)有父節(jié)點(diǎn)則返回undef。

# "<b><i>Test</i></b>"
$dom->parse('<p><b><i>Test</i></b></p>')->at('i')->parent;

parse

$dom = $dom->parse('<foo bar="baz">I ? Mojolicious!</foo>');

使用Mojo::DOM::HTML解析HTML/XML片段铁追。

# Parse XML
my $dom = Mojo::DOM->new->xml(1)->parse('<foo>I ? Mojolicious!</foo>');

prepend

$dom = $dom->prepend('<p>I ? Mojolicious!</p>');

在此節(jié)點(diǎn)之前添加HTML/XML代碼片段(除root節(jié)點(diǎn)外季蚂,其他所有節(jié)點(diǎn)都可以使用些方法)。

# "<div><h1>Test</h1><h2>123</h2></div>"
$dom->parse('<div><h2>123</h2></div>')->at('h2')->prepend('<h1>Test</h1>')->root;

# "<p>Test 123</p>"
$dom->parse('<p>123</p>')->at('p')->child_nodes->first->prepend('Test ')->root;

prepend_content

$dom = $dom->prepend_content('<p>I ? Mojolicious!</p>');

將HTML/XML代碼片段或原始內(nèi)容添加到root或tag類(lèi)型節(jié)點(diǎn)內(nèi)容的前面琅束。

# "<div><h2>Test123</h2></div>"
$dom->parse('<div><h2>123</h2></div>')->at('h2')->prepend_content('Test')->root;

# "<!-- Test 123 --><br>"
$dom->parse('<!-- 123 --><br>')->child_nodes->first->prepend_content(' Test')->root;

# "<p><i>123</i>Test</p>"
$dom->parse('<p>Test</p>')->at('p')->prepend_content('<i>123</i>')->root;

previous

my $sibling = $dom->previous;

以Mojo::DOM形式返回$dom元素前一個(gè)同級(jí)元素扭屁,如果沒(méi)有則返回undef。

# "<h1>Test</h1>"
$dom->parse('<div><h1>Test</h1><h2>123</h2></div>')->at('h2')->previous;

previous_node

my $sibling = $dom->previous_node;

以Mojo::DOM對(duì)象的形式返回$dom節(jié)點(diǎn)的前一個(gè)同級(jí)節(jié)點(diǎn)涩禀,如果沒(méi)有則返回undef料滥。

# "123"
$dom->parse('<p>123<!-- Test --><b>456</b></p>')->at('b')->previous_node->previous_node;

# " Test "
$dom->parse('<p>123<!-- Test --><b>456</b></p>')->at('b')->previous_node->content;

remove

my $parent = $dom->remove;

刪除當(dāng)前節(jié)點(diǎn),返回父節(jié)點(diǎn)或root節(jié)點(diǎn)(如果調(diào)用此方法的是root)艾船。

# "<div></div>"
$dom->parse('<div><h1>Test</h1></div>')->at('h1')->remove;

# "<p><b>456</b></p>"
$dom->parse('<p>123<b>456</b></p>')->at('p')->child_nodes->first->remove->root;

replace

my $parent = $dom->replace('<div>I ? Mojolicious!</div>');

使用HTML/XML代碼片段替換當(dāng)前節(jié)點(diǎn)葵腹,以Mojo::DOM的形式返回父結(jié)點(diǎn)或返回root結(jié)點(diǎn)(如果調(diào)用此方法的是root)。

# "<div><h2>123</h2></div>"
$dom->parse('<div><h1>Test</h1></div>')->at('h1')->replace('<h2>123</h2>');

# "<p><b>123</b></p>"
$dom->parse('<p>Test</p>')->at('p')->child_nodes->[0]->replace('<b>123</b>')->root;

root

my $root = $dom->root;

以Mojo::DOM對(duì)象的形式返回當(dāng)前結(jié)點(diǎn)的root結(jié)節(jié)屿岂。

strip

my $parent = $dom->strip;

在保留當(dāng)前元素內(nèi)容的情況下刪除當(dāng)前元素践宴。就像是給當(dāng)前元素脫去了衣服一樣。以Mojo::DOM對(duì)象的形式返回當(dāng)前元素的父元素爷怀。

# "<div>Test</div>"
$dom->parse('<div><h1>Test</h1></div>')->at('h1')->strip;

tag

my $tag = $dom->tag;
$dom    = $dom->tag('div');

設(shè)置或返回些元素的標(biāo)簽名阻肩。

# List tag names of child elements
say $dom->children->map('tag')->join("\n");

tap

$dom = $dom->tap(sub {...});

Mojo::Base 中 trap 的別名。

text

my $text = $dom->text;

僅從當(dāng)前元素提取文件霉撵,不包含子元素磺浙。

# "bar"
$dom->parse("<div>foo<p>bar</p>baz</div>")->at('p')->text;

# "foo\nbaz\n"
$dom->parse("<div>foo\n<p>bar</p>baz\n</div>")->at('div')->text;

to_string

my $str = $dom->to_string;

將此節(jié)點(diǎn)及其內(nèi)容以HTML/XML字符串的形式返回。

# "<b>Test</b>"
$dom->parse('<div><b>Test</b></div>')->at('div b')->to_string;

tree

my $tree = $dom->tree;
$dom     = $dom->tree(['root']);

文檔對(duì)象模型的內(nèi)部數(shù)據(jù)結(jié)構(gòu)徒坡,因?yàn)檫@種數(shù)據(jù)結(jié)構(gòu)非常靈活撕氧,所以返回的結(jié)果是動(dòng)態(tài)的。

type

my $type = $dom->type;

返回當(dāng)前節(jié)點(diǎn)的類(lèi)型喇完,可能的類(lèi)型如下:cdata伦泥, comment,doctype锦溪,pi不脯, raw, root刻诊, tag防楷,text。

# "cdata"
$dom->parse('<![CDATA[Test]]>')->child_nodes->first->type;

# "comment"
$dom->parse('<!-- Test -->')->child_nodes->first->type;

# "doctype"
$dom->parse('<!DOCTYPE html>')->child_nodes->first->type;

# "pi"
$dom->parse('<?xml version="1.0"?>')->child_nodes->first->type;

# "raw"
$dom->parse('<title>Test</title>')->at('title')->child_nodes->first->type;

# "root"
$dom->parse('<p>Test</p>')->type;

# "tag"
$dom->parse('<p>Test</p>')->at('p')->type;

# "text"
$dom->parse('<p>Test</p>')->at('p')->child_nodes->first->type;

val

my $value = $dom->val;

從表單元素(button则涯、input复局、option、select粟判、textarea)中提取表單的值亿昏。如果元素沒(méi)有值則返回undef。在select中使用multiple屬性的情況下档礁,會(huì)查找所有具有selected屬性的option元素角钩,返回的是一個(gè)包含所有找到option元素中值的數(shù)組的引用,如果找不到任何selected屬性的option元素呻澜,則返回undef递礼。

# "a"
$dom->parse('<input name=test value=a>')->at('input')->val;

# "b"
$dom->parse('<textarea>b</textarea>')->at('textarea')->val;

# "c"
$dom->parse('<option value="c">Test</option>')->at('option')->val;

# "d"
$dom->parse('<select><option selected>d</option></select>')->at('select')->val;

# "e"
$dom->parse('<select multiple><option selected>e</option></select>')->at('select')->val->[0];

# "on"
$dom->parse('<input name=test type=checkbox>')->at('input')->val;

with_roles

my $new_class = Mojo::DOM->with_roles('Mojo::DOM::Role::One');
my $new_class = Mojo::DOM->with_roles('+One', '+Two');
$dom          = $dom->with_roles('+One', '+Two');

Mojo::Base中with_roles方法的別名。

wrap

$dom = $dom->wrap('<div></div>');

在當(dāng)前節(jié)點(diǎn)外包裝HTML/XML代碼片段(除root節(jié)點(diǎn)以外的所有節(jié)點(diǎn)都可以調(diào)用此方法)易迹,將當(dāng)前節(jié)點(diǎn)作為“包裝器”第一個(gè)最內(nèi)層元素的最后一個(gè)子節(jié)點(diǎn)宰衙。

# "<p>123<b>Test</b></p>"
$dom->parse('<b>Test</b>')->at('b')->wrap('<p>123</p>')->root;

# "<div><p><b>Test</b></p>123</div>"
$dom->parse('<b>Test</b>')->at('b')->wrap('<div><p></p>123</div>')->root;

# "<p><b>Test</b></p><p>123</p>"
$dom->parse('<b>Test</b>')->at('b')->wrap('<p></p><p>123</p>')->root;

# "<p><b>Test</b></p>"
$dom->parse('<p>Test</p>')->at('p')->child_nodes->first->wrap('<b>')->root;

wrap_content

$dom = $dom->wrap_content('<div></div>');

在當(dāng)前節(jié)點(diǎn)的“內(nèi)容”外包裝HTML/XML代碼片段(只有root和tag節(jié)點(diǎn)可以調(diào)用此方法),將當(dāng)前節(jié)點(diǎn)作為“包裝器”第一個(gè)最內(nèi)層元素的最后一個(gè)子節(jié)點(diǎn)睹欲。

# "<p><b>123Test</b></p>"
$dom->parse('<p>Test<p>')->at('p')->wrap_content('<b>123</b>')->root;

# "<p><b>Test</b></p><p>123</p>"
$dom->parse('<b>Test</b>')->wrap_content('<p></p><p>123</p>');

xml

my $bool = $dom->xml;
$dom     = $dom->xml($bool);

獲取或設(shè)置解析器中禁用HTML語(yǔ)義的開(kāi)關(guān)供炼。默認(rèn)為關(guān)閉狀態(tài)。

重載的操作符

array

my @nodes = @$dom;

相當(dāng)于調(diào)用了 child_nodes窘疮,可以理解為child_nodes的別名函數(shù)袋哼。

bool

my $bool = !!$dom;

總是返回true。

hash

my %attrs = %$dom;

相當(dāng)于調(diào)用了 attr 闸衫,可以理解為 attr 的別名函數(shù)涛贯。

stringify

my $str = "$dom";

相當(dāng)于調(diào)用了 to_string,可以理解為 to_string的別名函數(shù)蔚出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弟翘,一起剝皮案震驚了整個(gè)濱河市虫腋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稀余,老刑警劉巖悦冀,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異睛琳,居然都是意外死亡盒蟆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)师骗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)历等,“玉大人,你說(shuō)我怎么就攤上這事辟癌『停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵黍少,是天一觀的道長(zhǎng)浩螺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)仍侥,這世上最難降的妖魔是什么要出? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮农渊,結(jié)果婚禮上患蹂,老公的妹妹穿的比我還像新娘。我一直安慰自己砸紊,他們只是感情好传于,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著醉顽,像睡著了一般沼溜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上游添,一...
    開(kāi)封第一講書(shū)人閱讀 52,196評(píng)論 1 308
  • 那天系草,我揣著相機(jī)與錄音,去河邊找鬼唆涝。 笑死找都,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廊酣。 我是一名探鬼主播能耻,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了晓猛?” 一聲冷哼從身側(cè)響起饿幅,我...
    開(kāi)封第一講書(shū)人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戒职,沒(méi)想到半個(gè)月后诫睬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帕涌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了续徽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚓曼。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钦扭,靈堂內(nèi)的尸體忽然破棺而出纫版,到底是詐尸還是另有隱情,我是刑警寧澤客情,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布其弊,位于F島的核電站,受9級(jí)特大地震影響膀斋,放射性物質(zhì)發(fā)生泄漏梭伐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一仰担、第九天 我趴在偏房一處隱蔽的房頂上張望糊识。 院中可真熱鬧,春花似錦摔蓝、人聲如沸赂苗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拌滋。三九已至,卻和暖如春猜谚,著一層夾襖步出監(jiān)牢的瞬間败砂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工魏铅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吠卷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓沦零,卻偏偏與公主長(zhǎng)得像祭隔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 之前通過(guò)深入學(xué)習(xí)DOM的相關(guān)知識(shí)疾渴,看了慕課網(wǎng)DOM探索之基礎(chǔ)詳解篇這個(gè)視頻(在最近看第三遍的時(shí)候千贯,準(zhǔn)備記錄一點(diǎn)東西...
    微醺歲月閱讀 4,487評(píng)論 2 62
  • 一、樣式篇 第1章 初識(shí)jQuery (1)環(huán)境搭建 進(jìn)入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,392評(píng)論 0 44
  • 一搞坝、JS前言 (1)認(rèn)識(shí)JS 也許你已經(jīng)了解HTML標(biāo)記(也稱(chēng)為結(jié)構(gòu))搔谴,知道了CSS樣式(也稱(chēng)為表示),會(huì)使用HT...
    凜0_0閱讀 2,777評(píng)論 0 8
  • 正值二十歲的我們是許多人眼中最美的年紀(jì)桩撮,至少我們還可以肆意揮灑我們的青春敦第,因?yàn)槲覀冞€年輕。 也許過(guò)了很多很多年店量,我...
    八塊腹肌的麻辣燙閱讀 386評(píng)論 1 2
  • 自己自學(xué)的芜果,沒(méi)有人指導(dǎo),雖說(shuō)畫(huà)的不好融师,但也要練練右钾,求指導(dǎo) 只是起了個(gè)稿,以后再上色旱爆。 如果你也喜歡畫(huà)畫(huà)一起吧
    尋一個(gè)愛(ài)哭的男孩子閱讀 337評(píng)論 5 1