Hiro技术站

插件专区新篇—-Hiro.pagenav:自渲染、自解析的分页插件 v1.8更新

Ajax:当前页面更改内容,前端实现

分类:jQuery, 案例分享 发表时间:2009年09月23日 字体大小:12号14号

相信大家有用过Google Doc或Flickr,或者一些SNS社区的图片添加描述信息的效果,他们是在点击了一段文字后出现一个输入框,在输入框内输入你要填写的内容,点击“确认”或者“发表”即可立即显示出来。

今天做的这个效果呢,就是其中的截取版本。为什么这么说呢,因为我的效果只实现了前端的更改后立即发布的效果,而没有实际的与服务器端交互,也没有将输入的内容添加到数据库中,主要是为大家介绍一下实现原理。

downloaddemo

1.HTML代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<div id="container">
  <h1>Ajax Editing</h1>
  <p>鼠标移动到列表上,双击即可以进行编辑!</p>
  <div class="block">
    <h2>一、电影列表</h2>
    <ul class="editable">
      <li>《建国大业》,<span class="color_red">更新中...</span></li>
      <li><a href="http://www.ihiro.org/film-eternal-beloved">《爱有来生》</a></li>
      <li><a href="http://www.ihiro.org/movie-coco-chanel">《COCO Chanel》</a></li>
      <li><a href="http://www.ihiro.org/one-night-in-supermarket">《夜店》</a></li>
      <li><a href="http://www.ihiro.org/the-legend-of-1900">《海上钢琴师–1900的传说》</a></li>
      <li><a href="http://www.ihiro.org/film-xinsushijian-feedback">《新宿事件》</a></li>
    </ul>
  </div>
  <div class="block">
    <h2>二、书籍列表</h2>
    <ul class="editable">
      <li>《精通Javascript》</li>
      <li>《jQuery基础教程》</li>
      <li>《Flex入门到精通》</li>
      <li>《PHP与MySQL Web开发》</li>
      <li>《Google,你可以做什么》</li>
      <li>《不抱怨的世界》</li>
    </ul>
  </div>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
* { margin:0; padding:0;}
body { font:12px/20px Georgia, "Times New Roman", Times, serif; color:#404040;}
 
h2 { font-size:24px;}
 
.color_red { color:#F00;}
 
#container { width:400px; margin:30px auto; overflow:hidden; height:1%;}
 
	/* 标题样式 */
	#container h1 { text-align:center; font:32px "Lucida Sans Unicode", "Lucida Grande", sans-serif; margin-bottom:20px;}
 
	.block { width:180px; float:left; margin:30px 20px 0 0;}
 
	/* 列表li的样式 */
	ul.editable li { padding:10px 0; list-style:none;}
 
	/* 高亮当前编辑的列表li */
	.hover { background:#E8F3FF;}
 
	/* 高亮当前的input输入框 */
	.editInput { width:160px; border:2px solid #E8F3FF; display:block;}
 
 
	/* save和cancel按钮的效果,鼠标移动到上面的效果 */
	.btnSave, .btnCancel { padding:0 5px; border:1px solid #09F; background:#36F; color:#fff; text-decoration:none; margin:10px 0 0 20px;}
	.btnSave:hover, .btnCancel:hover  { border:1px solid #36F; color:#39F; background:#fff;}

3. jQuery代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$(function() {
 
	var oldText, newText;
 
	//鼠标移动到列表li上后,添加一个高亮的背景
	$('.editable li').hover(function() {
		$(this).addClass('hover');
	}, function() {
		$(this).removeClass('hover');
	}).bind('dblclick', function() {
 
		//获得列表li中原先的html代码
		oldText = $(this).html().replace(/"/g, "&quot;");
 
		//将原先的html代码放在一个input中,并追加save和cancel按钮后插入到列表li中
		$(this).html('<input type="text" class="editInput" value="' + oldText +'" /><a href="#" class="btnSave">save</a><a href="#" class="btnCancel">cancel</a>');
	}).children('a').attr('target', '_blank');	//链接在新窗口中打开
 
	//点击save按钮,将新的值插入在列表li中
	$('.btnSave').live('click', function() {
		newText = $(this).siblings('input').val().replace(/"/g, "&quot;");
 
		$(this).parent('li').html(newText);
 
		//设置超链接a的跳转为否
		return false;
	});
 
	//若点击cancel按钮,则将最初的html代码插入在列表li中
	$('.btnCancel').live('click', function() {
		$(this).parent('li').html(oldText);
 
		//设置超链接a的跳转为否
		return false;
	});
 
});

双击列表li后,将原先列表li中的html源码保存在oldText变量中,并且在列表li标签内插入一个input输入框和两个链接作为按钮save和cancel之用;
点击save按钮后,将input中的新的html源码保存在newText变量中,重新插入到列表li中,从而覆盖了列表里中的input源码;
点击cancel按钮,浙江原先的html代码oldText重新插入到列表li中,覆盖掉因双击插入的input输入框和两个链接按钮。

注意:源代码中没有jQuery库文件,请下载查看代码的朋友根据源代码路径自行添加。

不错不错,已经有 个评论!
  1. 恩,多谢分享,我去试试

  2. 学习了

  3. 技术男,勇于创新的技术男!

  4. 很好很强大!

  5. 不行 不太适合我!

  6. 先去试试看什么效果!~

  7. Ajax地确很强大,未来很有发展潜力。

    • 不是未来,现在已经用的很普及了!只是我们接触的晚了而已!!

  8. 这就是传说中的就地编辑呀??
    找了很久的东西!
    不过,如果要把需改的内容存入数据库,又怎么做呀??

    • 在js代码中使用$.ajax()或$.post()函数与PHP脚本交互,实现与数据库的操作!

  9. 呵呵 很强悍哦…拜会…

  10. 太强大了

  11. javaisgod

    mootool怎么实现呢?

    • 没研究过mootool,所以也不知道该怎么实现!

我要评论

* *