function bad( obj, name) {
return eval('obj.' + name);
}
bad(r, 'foo.bar'); // 'value'
function better( obj, name) {
var parts = name.split('.'), i, cursor = r;
for( i = 0; i < parts.length; i++) {
if( !cursor.hasOwnProperty( parts[i])) throw('No such property: ' + parts[i]);
cursor = cursor[parts[i]];
}
return cursor;
}
better(r, 'foo.bar'); // 'value'
<div class="textfield" contentEditable="true">напиши-ка!
</div>
.textfield {
font-size:16px;
color:white;
min-height:16px;
line-height:20px;
width:200px;
border:1px solid #999;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACtJREFUeNpiNDY2ZiAXMDFQAEY1j2oe1TyoNLNoOu0nX/P1fY4D42yAAAMA7aYDxR1GwC8AAAAASUVORK5CYII=')
}
body {background:#333; font-family:Arial, sans-serif}
<textarea rows="1" cols="20" id="ta1" class="textfield">напиши-ка!
</textarea>
var ta1 = document.getElementById('ta1');
ta1.addEventListener('input', function(){
var rows = Math.ceil( ta1.scrollHeight / 20 ) - 1;
ta1.style.height = 20 * rows + 'px';
});
closest: function( selectors, context ) {
var cur,
i = 0,
l = this.length,
matched = [],
targets = typeof selectors !== "string" && jQuery( selectors );
// Positional selectors never match, since there's no _selection_ context
if ( !rneedsContext.test( selectors ) ) {
for ( ; i < l; i++ ) {
for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
// Always skip document fragments
if ( cur.nodeType < 11 && ( targets ?
targets.index( cur ) > -1 :
// Don't pass non-elements to Sizzle
cur.nodeType === 1 &&
jQuery.find.matchesSelector( cur, selectors ) ) ) {
matched.push( cur );
break;
}
}
}
}
return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
},
jQuery.find.matchesSelector()
и jQuery.uniqueSort
() <li>
внутри <ul>
(по id). \(\d+\)
совпадает с открывающейся скобкой, одной или несколькими цифрами и закрывающейся скобкой. Эту регулярку заменять на совпавший фрагмент в теге <span>
:$('#catalog>li>a').each(function(){
$(this).html( function(i,t){
return t.replace(/(\(\d+\))/, '<span>$1</span>')
});
});
Fiddle indexOf( ID )
в массиве, задающем порядок сортировки:var data = [
{ID: 1, country: 'England'},
{ID: 4, country: 'USA'},
{ID: 9, country: 'Russia'},
{ID: 5, country: 'Germany'},
{ID: 6, country: 'France'},
];
const order = [5,1,9,6,4];
data.sort((a,b) => order.indexOf(a.ID) - order.indexOf(b.ID));
/* [
{"ID":5,"country":"Germany"},
{"ID":1,"country":"England"},
{"ID":9,"country":"Russia"},
{"ID":6,"country":"France"},
{"ID":4,"country":"USA"}]
*/
data = data.map( e => {e.sortBy = order.indexOf(e.ID); return e;} );
data.sort( (a,b) => a.sortBy - b.sortBy);
var commons = {
el1: document.getElementById('id1')
,el2: document.getElementById('id2')
,el3: document.getElementById('id3')
}
function A( opts ){
opts.el1.innerHTML = 'aaa';
}
function B( opts ){
opts.el1.innerHTML = 'A.A.A.';
opts.el2.innerHTML = 'bbb';
opts.el3.innerHTML = 'ccc';
}
A( commons);
B( commons);
sv
, когда эта функция возвращает только str
?function stringTween(){
var sv = [1,2,3];
return function(){
sv[0] = 'a'; sv[1]='b'; sv[2]='c';
return "string";
}
}
stringTween();
sv
? stroke-dasharray
пунктиром. Очень-очень длинным пунктиром, таким, что один штрих захватывает всю окружность. Второй параметр, stroke-dashoffset
, сдвигает этот штрих "из кадра", оставляя видимой нужную его часть – соотв. отображаемому прогрессу.// ранее: var something = ... ;
if( Array.isArray( something) console.log( 'isArray: true' );
if( something instanceof Array) console.log( 'instanceof: true' );
if( Object.prototype.toString.call( something ) === '[object Array]' ) console.log( 'toString: true');
if( something.constructor === Array) console.log( 'constructor: true');
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('What do you think of Node.js? ', (answer) => {
// здесь что-то делайте с полученной строкой answer
console.log(`Thank you for your valuable feedback: ${answer}`);
rl.close();
});
var result = {};
for( prop in this) {
if( this.hasOwnProperty( prop) && typeof prop != 'function') {
result[ prop] = this[ prop];
}
}
return result;
const currentTime = 1501649511661
и в коде сравнивать с текущим системным временем. Различие более, чем на X считать признаком закэшированности страницы.site.ru/page?mytime=1501649511661
\b
посчитает любой кириллический символ не-принадлежащим к слову.\b
надо заменить на "начало строки или пробельный символ, после которого идёт искомые буквы": (?:^|\\s)
function findMatches( input, query) {
query = query.split(/\s+/);
var i, parts = [];
for(i in query) {
parts.push( '(?=.*(?:^|\\s)' + query[i] + ')');
}
var re = new RegExp('^' + parts.join(''), 'iug');
var matches = [];
for(i in str) {
if( re.test( str[i])) matches.push( str[i]);
}
return matches;
}
var str = [
"Превед веселый медвед"
,"Медведь, тебе привет"
,"ревед веселый едвед"
,"тебе привет"
];
var query = 'Пр мед';
var result = findMatches( str, query); // ["Превед веселый медвед","Медведь, тебе привет"]