[招聘]SOHU Web前端工程师 北京 要是招的是普通的Javascript程序员的话,我还是继续路过好了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,祝福 btbtd,本人目前从事这方面的工作:说实话,合格的web前端工程师确实很难找。什么叫合格的呢? 既然做web前端,w3c,css,html都需要熟知吧,各个浏览器之间的差异应该很清楚并且可以给出解决方案吧至于javascript,这个要求应该是比较精通了吧,能够以面向对象的方式去开发javascript应用,不要老是拿来主意。至于B/S开发模式及原理,这个了解即可,因为完全不知道的话 那么你和server端程序员讨论接口的时候就会出于尴尬之地至于本科学历,我倒是觉得完全没有必要 对这点表示不太赞同,既然是javascript程序员,那么说明公司是比较重视,才会单独拿出一个 职位 作为javascript程序员的职位。再说既然写javascript必然和html/css分不开,那么你有什么理由 继续路过呢 ? 有些公司和部门 比较傲慢 ,面试后回复都没有,确实是不过还好了,只要我们自己不卑不亢,再接再厉,管他们怎么做呢? 相信自己的实力就好,很喜欢和web前端开发的朋友们交流。。 看过 btbtd 的作品,水平肯定在楼主的要求之上。 还在大四, 研究ajax(js,dom,xml),html,css时间5个月之前搞的java, 英语六级过关, 工作经验不足.正在一家公司实习, 负责网页游戏js库的设计编写. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title><style type="text/css"></style></head><body><script type="text/javascript"> function extend(){ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = true, options; if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; i = 2; } if ( typeof target !== "object" && Object.prototype.toString.call(target)!="[object Function]") target = {}; for(;i<length;i++){ if ( (options = arguments[ i ]) != null ) for(var name in options){ var src = target[ name ], copy = options[ name ]; if ( target === copy ) continue; if ( deep && copy && typeof copy === "object" && !copy.nodeType ){ target[ name ] = arguments.callee( deep, src || ( copy.length != null ? [ ] : { } ), copy ); } else if(copy !== undefined) target[ name ] = copy; } } return target; };//---------------------------------------------------------------------------- (function(){ var window = this, now=function(){return +new Date;},jsc = now(), ajaxSettings = { url: 'http://www.beiju.com?a=a', global: true, type: "GET", contentType: "application/x-www-form-urlencoded", processData: true, async: true, xhr:function(){ return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); }, accepts: { xml: "application/xml, text/xml", html: "text/html", script: "text/javascript, application/javascript", json: "application/json, text/javascript", text: "text/plain", _default: "*/*" } }; //************************************************************************************************** window.ajax = function(s){ s = extend(true, s, extend(true,{},ajaxSettings, s)); var jsre = /=\?(&|$)/g, jsonp,data,type = s.type.toUpperCase(); //暂时考虑的都是jsonp的情况 所以这里横成立 if ( s.dataType == "jsonp" ) { if ( type == "GET" ) { if ( !s.url.match(jsre) ) //如果url中没有? 就代表 只是一个url 没有参数 所以后面+上callback //如果有? 代表有参数 所以用&来连接jsonp的形式 s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?"; } else if ( !s.data || !s.data.match(jsre) ) s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?"; s.dataType = "json"; }; //这里页是横成立的 if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) { //jsc是上面算出来的 ++后 就可以一直都是唯一的了 jsonp = "jsonp" + jsc++; if ( s.data ) s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1"); //把=?替换成 = jsonp + 时间戳 因为下面要设置成全局的 所以能避免冲突 s.url = s.url.replace(jsre, "=" + jsonp + "$1"); s.dataType = "script"; //加上一个全局的 变量 这个就是回调函数了 window[ jsonp ] = function(tmp){ data = tmp; success(); //回调吧 都不知道那里冒出来的 complete(); window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch(e){} if ( head ) head.removeChild( script ); }; } //不明白cache属性是做什么用的 if ( s.dataType == "script" && s.cache == null ) s.cache = false; if ( s.cache === false && type == "GET" ) { var ts = now(); var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2"); //这个难道是为了避免缓存+上的时间戳 s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : ""); }; if ( s.data && type == "GET" ) { s.url += (s.url.match(/\?/) ? "&" : "?") + s.data; // IE likes to send both get and post data, prevent this s.data = null; }; //一个判断url的正则 parts[0]为整个 1为头 2为域名 var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url ); if ( s.dataType == "script" && type == "GET" && parts&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){ //创建标签并建立好回调 var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); script.src = s.url; if (s.scriptCharset) script.charset = s.scriptCharset; // Handle Script loading if ( !jsonp ) { var done = false; script.onload = script.onreadystatechange = function(){ if ( !done && (!this.readyState ||this.readyState == "loaded" || this.readyState == "complete") ) { done = true; success(); complete(); script.onload = script.onreadystatechange = null; head.removeChild( script ); } } } head.appendChild(script); // We handle everything using the script element injection return undefined; } };//************************************************************************************************** })(); var a = ajax({ jsonp : 'dabeiju', dataType : 'jsonp' }); </script></body></html> function extend(){ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = true, options; if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; i = 2; } if ( typeof target !== "object" && Object.prototype.toString.call(target)!="[object Function]") target = {}; for(;i<length;i++){ if ( (options = arguments[ i ]) != null ) for(var name in options){ var src = target[ name ], copy = options[ name ]; if ( target === copy ) continue; if ( deep && copy && typeof copy === "object" && !copy.nodeType ){ target[ name ] = arguments.callee( deep, src || ( copy.length != null ? [ ] : { } ), copy ); } else if(copy !== undefined) target[ name ] = copy; } } return target; };//---------------------------------------------------------------------------- (function(){ var window = this, now=function(){return +new Date;},jsc = now(), ajaxSettings = { url: 'http://www.beiju.com?a=a', global: true, type: "GET", contentType: "application/x-www-form-urlencoded", processData: true, async: true, xhr:function(){ return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); }, accepts: { xml: "application/xml, text/xml", html: "text/html", script: "text/javascript, application/javascript", json: "application/json, text/javascript", text: "text/plain", _default: "*/*" } }; //************************************************************************************************** window.ajax = function(s){ s = extend(true, s, extend(true,{},ajaxSettings, s)); var jsre = /=\?(&|$)/g, jsonp,data,type = s.type.toUpperCase(); //暂时考虑的都是jsonp的情况 所以这里横成立 if ( s.dataType == "jsonp" ) { if ( type == "GET" ) { if ( !s.url.match(jsre) ) //如果url中没有? 就代表 只是一个url 没有参数 所以后面+上callback //如果有? 代表有参数 所以用&来连接jsonp的形式 s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?"; } else if ( !s.data || !s.data.match(jsre) ) s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?"; s.dataType = "json"; }; //这里页是横成立的 if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) { //jsc是上面算出来的 ++后 就可以一直都是唯一的了 jsonp = "jsonp" + jsc++; if ( s.data ) s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1"); //把=?替换成 = jsonp + 时间戳 因为下面要吧回调函数名设置成全局的 所以能避免冲突 s.url = s.url.replace(jsre, "=" + jsonp + "$1"); s.dataType = "script"; //加上一个全局的 变量 这个就是回调函数了 window[ jsonp ] = function(tmp){ data = tmp; alert(1) success(); //回调吧 都不知道那里冒出来的 complete(); window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch(e){} if ( head ) head.removeChild( script ); }; } //不明白cache属性是做什么用的 if ( s.dataType == "script" && s.cache == null ) s.cache = false; if ( s.cache === false && type == "GET" ) { var ts = now(); var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2"); //这个难道是为了避免缓存+上的时间戳 s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : ""); }; if ( s.data && type == "GET" ) { s.url += (s.url.match(/\?/) ? "&" : "?") + s.data; // IE likes to send both get and post data, prevent this s.data = null; }; //一个判断url的正则 parts[0]为整个 1为头 2为域名 var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url ); //如果不是请求的当前页面 if ( s.dataType == "script" && type == "GET" && parts&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){ //创建标签并建立好回调 var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); script.src = s.url; if (s.scriptCharset) script.charset = s.scriptCharset; // Handle Script loading if ( !jsonp ) { var done = false; script.onload = script.onreadystatechange = function(){ if ( !done && (!this.readyState ||this.readyState == "loaded" || this.readyState == "complete") ) { done = true; success(); complete(); script.onload = script.onreadystatechange = null; head.removeChild( script ); } } } head.appendChild(script); // We handle everything using the script element injection return undefined; } };//************************************************************************************************** })(); var a = ajax({ jsonp : 'dabeiju', dataType : 'jsonp', url : 'http://www.google.com/base/feeds/snippets?q=jquery&alt=json-in-script' }); IE6和IE7js获取jquery的document对象 求助:ie中怎么确定div的滚动条宽度 急急急急,求高人 web窗口关闭时,要求 输入密码, 密码正 确则关闭 否则不关闭,怎么实现 晕了。。请教页面刷新问题,帮忙啊 iframe取值问题 如何让<div>里的滚动条移动到最下方? Iframe的src="http://www.web.com",这个时候取www.web.com里面控件值??? 如何定义一个块,如何用代码控制块的显示?请相帮 还有一个问题,有关window属性的! 如何取消递归中的setTimeout? 如何用js控制按钮显示?
至于B/S开发模式及原理,这个了解即可,因为完全不知道的话 那么你和server端程序员讨论接口的时候就会出于尴尬之地
至于本科学历,我倒是觉得完全没有必要
对这点表示不太赞同,既然是javascript程序员,那么说明公司是比较重视,才会单独拿出一个 职位 作为javascript程序员的职位。再说既然写javascript必然和html/css分不开,那么你有什么理由 继续路过呢 ?
不过还好了,只要我们自己不卑不亢,再接再厉,管他们怎么做呢? 相信自己的实力就好,很喜欢和web前端开发的朋友们交流。。
看过 btbtd 的作品,水平肯定在楼主的要求之上。
之前搞的java, 英语六级过关, 工作经验不足.正在一家公司实习, 负责网页游戏js库的设计编写.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
</style>
</head>
<body>
<script type="text/javascript">
function extend(){
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = true, options;
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
i = 2;
}
if ( typeof target !== "object" && Object.prototype.toString.call(target)!="[object Function]")
target = {};
for(;i<length;i++){
if ( (options = arguments[ i ]) != null )
for(var name in options){
var src = target[ name ], copy = options[ name ];
if ( target === copy )
continue;
if ( deep && copy && typeof copy === "object" && !copy.nodeType ){
target[ name ] = arguments.callee( deep, src || ( copy.length != null ? [ ] : { } ), copy );
}
else if(copy !== undefined)
target[ name ] = copy;
}
}
return target;
};
//----------------------------------------------------------------------------
(function(){
var window = this, now=function(){return +new Date;},jsc = now(),
ajaxSettings = {
url: 'http://www.beiju.com?a=a',
global: true,
type: "GET",
contentType: "application/x-www-form-urlencoded",
processData: true,
async: true,
xhr:function(){
return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
},
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
script: "text/javascript, application/javascript",
json: "application/json, text/javascript",
text: "text/plain",
_default: "*/*"
}
};
//**************************************************************************************************
window.ajax = function(s){
s = extend(true, s, extend(true,{},ajaxSettings, s));
var jsre = /=\?(&|$)/g, jsonp,data,type = s.type.toUpperCase();
//暂时考虑的都是jsonp的情况 所以这里横成立
if ( s.dataType == "jsonp" ) {
if ( type == "GET" ) {
if ( !s.url.match(jsre) )
//如果url中没有? 就代表 只是一个url 没有参数 所以后面+上callback
//如果有? 代表有参数 所以用&来连接jsonp的形式
s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
} else if ( !s.data || !s.data.match(jsre) )
s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
s.dataType = "json";
};
//这里页是横成立的
if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
//jsc是上面算出来的 ++后 就可以一直都是唯一的了
jsonp = "jsonp" + jsc++;
if ( s.data )
s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
//把=?替换成 = jsonp + 时间戳 因为下面要设置成全局的 所以能避免冲突
s.url = s.url.replace(jsre, "=" + jsonp + "$1"); s.dataType = "script";
//加上一个全局的 变量 这个就是回调函数了
window[ jsonp ] = function(tmp){
data = tmp;
success(); //回调吧 都不知道那里冒出来的
complete();
window[ jsonp ] = undefined;
try{ delete window[ jsonp ]; } catch(e){}
if ( head )
head.removeChild( script );
};
} //不明白cache属性是做什么用的
if ( s.dataType == "script" && s.cache == null )
s.cache = false;
if ( s.cache === false && type == "GET" ) {
var ts = now();
var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
//这个难道是为了避免缓存+上的时间戳
s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
}; if ( s.data && type == "GET" ) {
s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
// IE likes to send both get and post data, prevent this
s.data = null;
};
//一个判断url的正则 parts[0]为整个 1为头 2为域名
var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url ); if ( s.dataType == "script" && type == "GET" && parts&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
//创建标签并建立好回调
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = s.url;
if (s.scriptCharset)
script.charset = s.scriptCharset;
// Handle Script loading
if ( !jsonp ) {
var done = false;
script.onload = script.onreadystatechange = function(){
if ( !done && (!this.readyState ||this.readyState == "loaded" || this.readyState == "complete") ) {
done = true;
success();
complete();
script.onload = script.onreadystatechange = null;
head.removeChild( script );
}
}
}
head.appendChild(script);
// We handle everything using the script element injection
return undefined;
}
};
//**************************************************************************************************
})();
var a = ajax({
jsonp : 'dabeiju',
dataType : 'jsonp'
});
</script>
</body>
</html>
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = true, options;
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
i = 2;
}
if ( typeof target !== "object" && Object.prototype.toString.call(target)!="[object Function]")
target = {};
for(;i<length;i++){
if ( (options = arguments[ i ]) != null )
for(var name in options){
var src = target[ name ], copy = options[ name ];
if ( target === copy )
continue;
if ( deep && copy && typeof copy === "object" && !copy.nodeType ){
target[ name ] = arguments.callee( deep, src || ( copy.length != null ? [ ] : { } ), copy );
}
else if(copy !== undefined)
target[ name ] = copy;
}
}
return target;
};
//----------------------------------------------------------------------------
(function(){
var window = this, now=function(){return +new Date;},jsc = now(),
ajaxSettings = {
url: 'http://www.beiju.com?a=a',
global: true,
type: "GET",
contentType: "application/x-www-form-urlencoded",
processData: true,
async: true,
xhr:function(){
return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
},
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
script: "text/javascript, application/javascript",
json: "application/json, text/javascript",
text: "text/plain",
_default: "*/*"
}
};
//**************************************************************************************************
window.ajax = function(s){
s = extend(true, s, extend(true,{},ajaxSettings, s));
var jsre = /=\?(&|$)/g, jsonp,data,type = s.type.toUpperCase();
//暂时考虑的都是jsonp的情况 所以这里横成立
if ( s.dataType == "jsonp" ) {
if ( type == "GET" ) {
if ( !s.url.match(jsre) )
//如果url中没有? 就代表 只是一个url 没有参数 所以后面+上callback
//如果有? 代表有参数 所以用&来连接jsonp的形式
s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
} else if ( !s.data || !s.data.match(jsre) )
s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
s.dataType = "json";
};
//这里页是横成立的
if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
//jsc是上面算出来的 ++后 就可以一直都是唯一的了
jsonp = "jsonp" + jsc++;
if ( s.data )
s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
//把=?替换成 = jsonp + 时间戳 因为下面要吧回调函数名设置成全局的 所以能避免冲突
s.url = s.url.replace(jsre, "=" + jsonp + "$1"); s.dataType = "script";
//加上一个全局的 变量 这个就是回调函数了
window[ jsonp ] = function(tmp){
data = tmp;
alert(1)
success(); //回调吧 都不知道那里冒出来的
complete();
window[ jsonp ] = undefined;
try{ delete window[ jsonp ]; } catch(e){}
if ( head )
head.removeChild( script );
};
} //不明白cache属性是做什么用的
if ( s.dataType == "script" && s.cache == null )
s.cache = false;
if ( s.cache === false && type == "GET" ) {
var ts = now();
var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
//这个难道是为了避免缓存+上的时间戳
s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
}; if ( s.data && type == "GET" ) {
s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
// IE likes to send both get and post data, prevent this
s.data = null;
};
//一个判断url的正则 parts[0]为整个 1为头 2为域名
var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );
//如果不是请求的当前页面
if ( s.dataType == "script" && type == "GET" && parts&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
//创建标签并建立好回调
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = s.url;
if (s.scriptCharset)
script.charset = s.scriptCharset;
// Handle Script loading
if ( !jsonp ) {
var done = false;
script.onload = script.onreadystatechange = function(){
if ( !done && (!this.readyState ||this.readyState == "loaded" || this.readyState == "complete") ) {
done = true;
success();
complete();
script.onload = script.onreadystatechange = null;
head.removeChild( script );
}
}
}
head.appendChild(script);
// We handle everything using the script element injection
return undefined;
}
};
//**************************************************************************************************
})();
var a = ajax({
jsonp : 'dabeiju',
dataType : 'jsonp',
url : 'http://www.google.com/base/feeds/snippets?q=jquery&alt=json-in-script'
});