极湖

无不用其“极”

Subscribe to RSS feed

Posts tagged with "HTML"

动态加载 js 和 css 文件的代码

, ,

写了几个函数,结果没用上。
感觉这些代码还是有些用处,所以贴在这儿,以备查用。
var headerHelper = {
    //*******************************************************
    // 动态加载js文件
    //*******************************************************
    loadJsFile: function(sUrl, doc) {
        doc = doc || document;
        var fileref = doc.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src", sUrl);
        doc.getElementsByTagName("head")[0].appendChild(fileref);
    },
    //*******************************************************
    // 将header中的js文件删除
    //*******************************************************
    removeJsFile: function(sUrl, doc) {
        doc = doc || document;
        var scriptTags = doc.getElementsByTagName('script')
        for (var i=scriptTags.length; i>=0; i--){
            if (scriptTags[i] && scriptTags[i].getAttribute('src') != null
                && scriptTags[i].getAttribute(targetattr).indexOf(sUrl)!=-1) {
                scriptTags[i].parentNode.removeChild(scriptTags[i])
            }
        }
    },
    //*******************************************************
    // 动态加载css文件
    //*******************************************************
    loadCssFile: function(sUrl, doc) {
        doc = doc || document;
        var fileref = doc.createElement("link");
        fileref.setAttribute("rel", "stylesheet");
        fileref.setAttribute("type", "text/css");
        fileref.setAttribute("href", sUrl);
        doc.getElementsByTagName("head")[0].appendChild(fileref);
    },
    //*******************************************************
    // 将header中的css文件删除
    //*******************************************************
    removeCssFile: function(sUrl, doc) {
        doc = doc || document;
        var linkTags = doc.getElementsByTagName('link')
        for (var i=linkTags.length; i>=0; i--){
            if (linkTags[i] && linkTags[i].getAttribute('href') != null
                && linkTags[i].getAttribute(targetattr).indexOf(sUrl)!=-1) {
                linkTags[i].parentNode.removeChild(linkTags[i])
            }
        }
    }
}

Web App: 四大名著

, , , ...

不久前在 GAE 上申请了一个子域名:bookproxy,原来想做一个通用的“读书中转站”,由于想法不成熟,也没有足够的时间和精力,搁浅了。

域名浪费了可惜,这两天有空,就做了一个名为“四大名著”的 Web App:

界面如下:





地址:
http://bookproxy.appspot.com

如果您还不习惯于用 Stanza 或是 iBooks 看书,又想温习一下四大名著,这个网站或许会有点用处。

【追记】
为了让小说中人物对话醒目一些,所有引号里面的文字加了颜色(代码 #609)。

将 HTML 变换为普通文本的两个函数

, ,

目的很简单,把 HTML 代码的 TAG 全部去掉,仅保留换行样式(比如 <br> 需转化为 \n), 原先的 <td> 或 <th> 之间加空格。

以下分别用 PHP 和 JavaScript 实现。
PHP:
function htmlToText( $html ){
 	$html = preg_replace( '/\r?\n/' , '' , $html );
 	$html = preg_replace('/<(\/?)(br|hr|div|p|object|marquee|table|tr|ul|ol|li|dd|dl|h[1-9])(\b)/i', $this->LFC.'<${1}${2}${3}', $html);
 	$html = preg_replace('/<\/(td|th)(\b)/i', ' </${1}${2}', $html);
 	return trim(strip_tags($html));
}
JavaScript:
function htmlToText(sHtml) {
 	sHtml = sHtml.replace(/\r?\n/g, '').replace(/<\/?(br|div|p|object|marquee|table|tr|ul|ol|li|dd|dl|h[1-9])\b/gi, function($0, tag){
 		return '\n' + $0;
 	}).replace(/<\/(td|th)\b/gi, function($0, tag){
 		return  ' ' + $0;
 	});
 	var element = document.createElement('div');  
 	element.innerHTML = sHtml;  
 	return element.textContent || element.innerText;
}

用 javascript 实现 HTML/XML 代码着色

, ,

【CSS】
span.xml-tagname {
  color: #A0B;
}
span.xml-attribute {
  color: #281;
}
span.xml-attname {
  color: #00F;
}
span.xml-comment {
  color: #A70;
}
span.xml-processing {
  color: #999;
}
span.xml-entity {
  color: #A22;
}

.code_wrapper {
	width:100%;
	height:200px;
	background-color:#FFF;
	overflow:auto;
}
.code {
	padding: 4px;
	background-color: #FFF;
	font-size: 12px;
	font-family: Gothic, monospace
}
【函数】
function hilightHtml(sHtml) {
	if(!sHtml) return '';
	sHtml = sHtml.replace(/></g, '>\n<').replace(/&/g, '&amp;').replace(/<([^<>]+)>/gm, function(sOut, sIn){
		if(sIn.match(/^!--/)) {
			//注释
			return sOut;
		} else if(sIn.match(/^\?/)) {
			return '<span class="xml-processing">&lt;' + sIn + '&gt;</span>';
		}
		sIn = sIn.replace(/\s+([\w:-]+)=(\"[^\"]*?\")/gi, function($0, name, value){
			//属性替换
			return ' <span class="xml-attname">' + name + '</span>=<span class="xml-attribute">' + value + '</span>';
		}).replace(/^([/]?)([^\s]+)/, function($0, slash, tagName){
			//标签名置換
			return '<span class="xml-tagname">' + slash + tagName + '</span>';
		});
		return '&lt;' + sIn + '&gt;';
	}).replace(/<(!--[\s\S]*?--)>/gm, function(sOut, comment){
		//注释替换
		return '<span class="xml-comment">&lt;' + comment + '&gt;</span>';
	}).replace(/(&amp;[a-z]+;)/gi, function($0, entity){
		//特殊文字替换
		return '<span class="xml-entity">' + entity + '</span>';
	}).replace(/\n/g, '<br />'); //换行
	return sHtml;
}
【实例】 js:
document.getElementById('target').innerHTML = hilightHtml(document.body.innerHTML);
HTML:
<div class="code_wrapper" contentEditable="true" onkeypress="return false;">
<pre id="target" class="code"></pre>
</div>

Jaml: 用 javascript 生成 html 的便捷方式

,

如果有一段 Javascript 代码:
div(
  h1("Some title"),
  p("Some exciting paragraph text"),
  br(),
  ul(
    li("First item"),
    li("Second item"),
    li("Third item")
  )
);
能生成这样的 HTML 代码:
<div>
  <h1>Some title</h1>
  <p>Some exciting paragraph text</p>
  <br />
  <ul>
    <li>First item</li>
    <li>Second item</li>
    <li>Third item</li>
  </ul>
</div>
您觉得怎么样?比起用字符串连接的方式直接写 html 简洁一些吧? 恩,有人写了一个叫 Jaml 的库,就是干这个事情的,有兴趣不妨一试,说不定以后能派上用场。 这儿是 Jaml 的作者介绍这个库的博文。

用 CSS 实现 footer 的位置固定

,

在网上找到很多解决方案,觉得这个网站介绍的方法最省事: http://ryanfait.com/sticky-footer/

实现方法简单说明如下:

首先,HTML要有以下内容
<body>
    <div class="wrapper">
        
        <div class="push">
        </div>
    </div>

    <div class="footer">
    </div>
</body>
其次,CSS要这样写
html, body {
    height: 100%;
}

.wrapper {
    min-height: 100%;
    height: auto !important;
    height: 100%; /* 为了兼容IE */
    margin: 0 auto -100px; /* 下部空余为 class="footer" 同样高度的负值 */
}

.footer,
.push {
    height: 100px;
}

注意点:
如果没有「div class="wrapper"」,Opera下「class="footer"」和「div class="wrapper"」将会重叠显示。

WYSIWYG 在线 HTML 编辑器收集

, ,

1. FCKeditor
老品牌,名气很大,功能很多,个头也很大,个人不是很喜欢。

2. TinyMCE
和 FCKeditor 齐名,名为"Tiny",实际上个头并不小,而且有向"Huge"发展的趋势。

3. Xinha
据其主页上的介绍,功能似乎很强大,其插件系统看起来不错。因为没用过,暂不置评。

4. widgEditor
个头很小,下载文件只有32k,我看了一下它的代码,感觉还不错,尽管功能稍欠,熟悉JavaScript的人应该可以自己将其扩充。

5. WMD
简单实用的在线编辑器。可惜不提供源代码下载。在自己的网页里面使用它需要注册。

6. WYMeditor
该编辑器做成 jQuery 的插件,这是其亮点,看了一下他的代码,感觉有些零乱,目录结构也不是很好。因个人很喜欢 jQuery,所以期待它做得更好。

7. Wikiwyg
这是 SocialText 采用的在线编辑器,双击网页的某一部分(div)就能使其进入编辑状态,这一点很方便。目前发现的问题是不支持 Opera。

8. WYSIWYG HTML control
一位英国人写的代码,个头很小,js文件才15k,看了一下其代码,比较清晰易懂,应该容易扩展,值得推荐。

9. crosseditor
一位日本人在 Prototype 库的基础上写的代码,非正式产品,其Sample代码可用来研究学习。

目前找到的就这些,网上还有很多类似的编辑器代码,青菜萝卜,各有所爱,自己挑喜欢的用吧。

这儿有一篇文章,教你怎样做 WYSIWYG HTML 编辑器,如果想自己做编辑器,读一读这篇文章肯定有好处。

JavaScript:HTML文本显示处理

,

在网页中需要显示含有HTML代码的文字,需要做一些文字替换。 服务器端的语言如PHP等,基本都提供这样的函数,比如PHP的函数htmlspecialchars,ASP的函数Sever.HTMLEncode。 本来以为JavaScript也会有现成的函数,找了一下发现没有。JavaScript有escape和unescape函数,不过,这两个函数是用来加密/还原非ASCII字符,而不是HTML的TAG变换。 终于找到两个方法如下: // 方法一: 普通的文字替换
function encodeHTML1(s) {
    var str = s;
    str = str.replace(/&/g, "&");
    str = str.replace(/</g, "<");
    str = str.replace(/>/g, ">");
    str = str.replace(/"/g, """);
    return str;
}
// 方法二: 利用DOM(或者说是DHTML)实现
function encodeHTML2(s) {
   var div = document.createElement('div');
   div.appendChild(document.createTextNode(s));
   str = div.innerHTML;
   div.outerHTML = "";
   return str;
}
为了测试以上函数,新作了一个HTML文件,文件内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>JavaScript Test</title>
<script type="text/javascript">

</script>
</head>
<body>

<h2>JavaScript Test</h2>
<hr />
<b>Input:</b> <br />
<textarea id="input" name="input" rows="10" cols="50"></textarea>
<hr />
<b>Output:</b> <br />
<div id="output"></div>
<hr />
<input type="button" id="execute" name="btn_test" size="50" value="Execute Test" onclick="executeTest();" />

</body>
</html>

两款用 JavaScript 实现的“所见即所得”编辑器

,

1. TinyMCE:
http://tinymce.moxiecode.com/index.php

2. FCKeditor
http://www.fckeditor.net/

不好说谁比谁好,看自己的喜好选用。

这儿有更多的“在线编辑器”介绍:
http://www.cnbruce.com/blog/showlog.asp?log_id=1021

解决无空格超长英文字符串不自动折行问题

, ,

1. 在适当的地方添加 <wbr> 标签。 例:
<div class="name">1111111......111111111111<wbr>222222222......2222222222</div>
* 仅适用于IE和Mozilla * 其他浏览器可以考虑用 &#8203; &shy; 2. 用CSS来控制 例:
<div style="word-wrap: break-word; word-break: break-all;">111111111......11111111</div>
* 仅适用于IE
February 2012
S M T W T F S
January 2012March 2012
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