通过多个元素遍历jquery

时间:2015-05-19 06:55:17

标签: javascript jquery html jquery-traversing

所以我试图遍历多个元素,我似乎遇到了问题。我有2个div,每个div有两个子元素 - 一个输入和一个链接。在链接内部还有一个图像。当我点击第一个div的输入按钮时,我希望能够遍历它的兄弟(链接{a tag})和链接子(img标签)并获取其源属性然后我将用来改变第二个div的图像。这是代码的摘录

HTML:

project(":ear") {
    apply plugin: "java"
    apply plugin: "ear"

    dependencies {
        deploy project(":ejbs")
        deploy project(":rest")
        earlib project(path:":ejbs", configuration:"compile")
        earlib(project(path:":rest", configuration:"compile")) {
            exclude module: 'ejbs'
        }
    }
}

JQUERY:

<div id="item">
     <a href="#" target="_blank" id="yeezy"><img src="img/deli/1.jpg" alt="Owl Image" id="homeimage"></a>
     <input type="submit" id="btn1" class="btn btn-default dropdown-toggle viewbuttons" value="View Item" onclick='changeImage( "img/deli/1.jpg" );'>
</div>
<div class="item">
     <a href="#" target="_blank"><img src="img/deli/2.jpg" alt="Owl Image" id="homeimage"></a>
     <input type="submit" id="btn" class="btn btn-default dropdown-toggle viewbuttons" value="View Item" onclick='changeImage( "img/deli/2.jpg" );'>
</div>

提前谢谢

2 个答案:

答案 0 :(得分:1)

ID必须是唯一的。 ID选择器仅选择文档中的第一个匹配元素。您正在获取/设置一个元素的src属性,即$('input#btn1').siblings('#yeezy').children('img')$("#homeimage")都指向相同的元素。

使用不同的ID或使用类属性。另请注意,由于ID必须是唯一的,$('input#btn1').siblings('#yeezy')并没有多大意义。您只需使用ID选择器选择元素:$('#yeezy');

答案 1 :(得分:0)

您的代码有一些问题。你使用id“homeimage”两次,但应该只有一个给定的id。除了要运行的属性之外,您还将onclick属性设置为不同的功能,因此您应该删除它们。最后,当您尝试更改homeimage的src属性时,可以在img attr上调用该函数:#import <Foundation/Foundation.h> #import "GCDAsyncSocket.h" #import <AudioToolbox/AudioToolbox.h> #import "TPCircularBuffer.h" @protocol AudioClientDelegate <NSObject> -(void) connected; -(void) animateSoundIndicator:(float) rms; @end @interface AudioClient : NSObject<GCDAsyncSocketDelegate> { NSString *ipAddress; BOOL stopped; } @property (nonatomic) TPCircularBuffer circularBuffer; @property (nonatomic) AudioComponentInstance audioUnit; @property (nonatomic, strong) GCDAsyncSocket *socket; @property (nonatomic, strong) id<AudioClientDelegate> delegate; -(id) initWithDelegate:(id)delegate; -(void) start:(NSString *)ip; -(void) stop; -(TPCircularBuffer *) outputShouldUseCircularBuffer; @end static OSStatus OutputRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData){ AudioClient *output = (__bridge AudioClient*)inRefCon; TPCircularBuffer *circularBuffer = [output outputShouldUseCircularBuffer]; if( !circularBuffer ){ AudioUnitSampleType *left = (AudioUnitSampleType*)ioData->mBuffers[0].mData; for(int i = 0; i < inNumberFrames; i++ ){ left[ i ] = 0.0f; } return noErr; }; int32_t bytesToCopy = ioData->mBuffers[0].mDataByteSize; SInt16* outputBuffer = ioData->mBuffers[0].mData; int32_t availableBytes; SInt16 *sourceBuffer = TPCircularBufferTail(circularBuffer, &availableBytes); int32_t amount = MIN(bytesToCopy,availableBytes); memcpy(outputBuffer, sourceBuffer, amount); TPCircularBufferConsume(circularBuffer,amount); return noErr; } -(id) initWithDelegate:(id)delegate { if(!self) { self = [super init]; } [self circularBuffer:&_circularBuffer withSize:24576*5]; _delegate = delegate; stopped = NO; return self; } -(void) start:(NSString *)ip { _socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue: dispatch_get_main_queue()]; NSError *err; ipAddress = ip; [UIApplication sharedApplication].idleTimerDisabled = YES; if(![_socket connectToHost:ipAddress onPort:[SM_Utils serverPort] error:&err]) { } [self setupAudioUnit]; } -(void) setupAudioUnit { AudioComponentDescription desc; desc.componentType = kAudioUnitType_Output; desc.componentSubType = kAudioUnitSubType_VoiceProcessingIO; desc.componentManufacturer = kAudioUnitManufacturer_Apple; desc.componentFlags = 0; desc.componentFlagsMask = 0; AudioComponent comp = AudioComponentFindNext(NULL, &desc); OSStatus status; status = AudioComponentInstanceNew(comp, &_audioUnit); if(status != noErr) { NSLog(@"Error creating AudioUnit instance"); } // Enable input and output on AURemoteIO // Input is enabled on the input scope of the input element // Output is enabled on the output scope of the output element UInt32 one = 1; status = AudioUnitSetProperty(_audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, kOutputBus, &one, sizeof(one)); if(status != noErr) { NSLog(@"Error enableling AudioUnit output bus"); } // Explicitly set the input and output client formats // sample rate = 44100, num channels = 1, format = 16 bit int point AudioStreamBasicDescription audioFormat = [self getAudioDescription]; status = AudioUnitSetProperty(_audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &audioFormat, sizeof(audioFormat)); if(status != noErr) { NSLog(@"Error setting audio format"); } AURenderCallbackStruct renderCallback; renderCallback.inputProc = OutputRenderCallback; renderCallback.inputProcRefCon = (__bridge void *)(self); status = AudioUnitSetProperty(_audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Global, kOutputBus, &renderCallback, sizeof(renderCallback)); if(status != noErr) { NSLog(@"Error setting rendering callback"); } // Initialize the AURemoteIO instance status = AudioUnitInitialize(_audioUnit); if(status != noErr) { NSLog(@"Error initializing audio unit"); } } - (AudioStreamBasicDescription)getAudioDescription { AudioStreamBasicDescription audioDescription = {0}; audioDescription.mFormatID = kAudioFormatLinearPCM; audioDescription.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked | kAudioFormatFlagsNativeEndian; audioDescription.mChannelsPerFrame = 1; audioDescription.mBytesPerPacket = sizeof(SInt16)*audioDescription.mChannelsPerFrame; audioDescription.mFramesPerPacket = 1; audioDescription.mBytesPerFrame = sizeof(SInt16)*audioDescription.mChannelsPerFrame; audioDescription.mBitsPerChannel = 8 * sizeof(SInt16); audioDescription.mSampleRate = 44100.0; return audioDescription; } -(void) socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err { if(!stopped) if(![_socket connectToHost:ipAddress onPort:[SM_Utils serverPort] error:&err]) { } } -(void) socket:(GCDAsyncSocket *)socket didReadData:(NSData *)data withTag:(long)tag { if(data.length > 0) { unsigned long len = [data length]; SInt16* byteData = (SInt16*)malloc(len); memcpy(byteData, [data bytes], len); double sum = 0.0; for(int i = 0; i < len/2; i++) { sum += byteData[i] * byteData[i]; } double average = sum / len; double rms = sqrt(average); [_delegate animateSoundIndicator:rms]; Byte* soundData = (Byte*)malloc(len); memcpy(soundData, [data bytes], len); if(soundData) { AudioBufferList *theDataBuffer = (AudioBufferList*) malloc(sizeof(AudioBufferList) *1); theDataBuffer->mNumberBuffers = 1; theDataBuffer->mBuffers[0].mDataByteSize = (UInt32)len; theDataBuffer->mBuffers[0].mNumberChannels = 1; theDataBuffer->mBuffers[0].mData = (SInt16*)soundData; [self appendDataToCircularBuffer:&_circularBuffer fromAudioBufferList:theDataBuffer]; } } [socket readDataToLength:18432 withTimeout:-1 tag:0]; } -(void)circularBuffer:(TPCircularBuffer *)circularBuffer withSize:(int)size { TPCircularBufferInit(circularBuffer,size); } -(void)appendDataToCircularBuffer:(TPCircularBuffer*)circularBuffer fromAudioBufferList:(AudioBufferList*)audioBufferList { TPCircularBufferProduceBytes(circularBuffer, audioBufferList->mBuffers[0].mData, audioBufferList->mBuffers[0].mDataByteSize); } -(void)freeCircularBuffer:(TPCircularBuffer *)circularBuffer { TPCircularBufferClear(circularBuffer); TPCircularBufferCleanup(circularBuffer); } -(void) socket:(GCDAsyncSocket *)socket didConnectToHost:(NSString *)host port:(uint16_t)port { OSStatus status = AudioOutputUnitStart(_audioUnit); if(status != noErr) { NSLog(@"Error starting audio unit"); } [socket readDataToLength:18432 withTimeout:-1 tag:0]; [_delegate connected]; } -(TPCircularBuffer *) outputShouldUseCircularBuffer { return &_circularBuffer; } -(void) stop { OSStatus status = AudioOutputUnitStop(_audioUnit); if(status != noErr) { NSLog(@"Error stopping audio unit"); } [UIApplication sharedApplication].idleTimerDisabled = NO; TPCircularBufferClear(&_circularBuffer); _audioUnit = nil; stopped = YES; } -(void) dealloc { OSStatus status = AudioOutputUnitStop(_audioUnit); if(status != noErr) { NSLog(@"Error stopping audio unit"); } [UIApplication sharedApplication].idleTimerDisabled = NO; TPCircularBufferClear(&_circularBuffer); _audioUnit = nil; stopped = YES; } @end

确保您的所有ID都是唯一的,从您的元素中移除任何onclick atrributes,然后替换:

("img", changeThis);

with:

$("#homeimage").attr("img", changeThis);